perm filename ARM[SYS,HE]8 blob
sn#084263 filedate 1974-01-28 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00047 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00004 00002 TITLE ARM
C00006 00003 These are conditional assembly flags
C00008 00004 IFN SIMU,<
C00012 00005 THIS IS THE 32 WORD MAIL MESSAGE
C00013 00006 START
C00017 00007 SKIPE BAND
C00018 00008 MOVE 1,FILE
C00019 00009 ZDTH:
C00022 00010 BACK:
C00024 00011 IFN REPORT+TRACK,<
C00026 00012 SPACE: MOVEI 1,=180
C00028 00013 FINISH: SPCWAR 636367
C00030 00014 SPACEWAR CODE
C00033 00015 NXTJIF:
C00035 00016 WATSTL: CONI CLOCK,AC
C00037 00017 IFN ADJUST,<
C00038 00018 MAIN: SKIPE MOVT NO MOVING RESTORE
C00041 00019 TT: PUSHJ P,REFLEX
C00042 00020 ANGLES: MOVEI I,5
C00046 00021 SERVO: TRNN RUN
C00048 00022 DRIVE THE ARM
C00051 00023 STOP ON FORCE
C00054 00024 NXTH: MOVE AC,[XWD T0,T0P]
C00058 00025 EVAL: MOVEI I,5
C00063 00026 DHO: AOJ I, DISASTER HAS OCCURED
C00066 00027 NEXT: TRNE RUN
C00069 00028 SETSET: MOVEI I,5
C00072 00029 MOTDRV: MOVE MQ,-1(P) ≤-100 DRIVE IN AC ≤77, JOINT IN I
C00074 00030 PREAD:
C00076 00031 DATA
C00081 00032 DYNAMICS
C00083 00033 NON LINEAR CALIBRATION
C00088 00034 HOPEN: OPENS THE HAND TO SET POINT
C00091 00035 HCLOSE:
C00093 00036 HEAD: MOVEI K,HANDCHA
C00096 00037 PLACE: PLACE HAND ON TABLE
C00097 00038 NUDGE: PUSHJ P,ACSAVE
C00101 00039 PATH: TRO RUN
C00103 00040 ASSIGN: HRRE K,@STKPTR
C00107 00041 CENTER: TRNN HCL
C00112 00042 SEARCH: SETZM XSEL
C00115 00043 MOVING: HRRE K,@STKPTR
C00116 00044 HOME: HRRE AC,@STKPTR
C00120 00045 IKU: HRRE AC,@STKPTR
C00123 00046 REFLEX: MOVEI I,1
C00124 00047 XLIST
C00125 ENDMK
C⊗;
TITLE ARM
; These are the error messages returned by the arm servo program
ALLOK←←0 ;ALL OK
NOFILE←←3 ;FILE NOT FOUND
NODATA←←4 ;ENTER ON DATA FILE FAILED
NODEV←←5 ;DEVICE DSK DOES NOT EXIST
EXER←←1 ;IF JUST 1 THEN OVERFLOW OR UNDERFLOW OCCURED,
;IF OF THE FORM X1 THEN EXCESSIVE FORCE REQUIRED AT JOINT X
GRASER←←2 ;GRASP ERROR, HAND CLOSED TOO FAR
TOUCH←←6 ;STOPPED ON TOUCH
;THIS ERROR IS OF THE FORM X6 WHERE THE X'th SENSOR TOUCHED
READER←←7 ;A/D READ ERROR
TERR←←20 ;SPACEWAR JOB FAILS TO TERMINATE
HTERR←←22 ;HAND FAILS TO FINISH IN TIME
STPERR←←23 ;ARM FAILED TO STOP ON FORCE LIMIT
LOOPER←←24 ;ARM IN CONTROL LOOP
SAVERR←←25 ;SAVE ARRAY INDEX ERROR
FUNERR←←27 ;FUNCTION DOES NOT EXIST
NOTHER←←30 ;THE ARM IS DOWN
INVMES←←40 ;MESSAGE INVALID, ARM NOT IN WAIT STATE
REAERR←←50 ;TRAJECTORY FILE READ ERROR
VERSN←←60 ;VERSION NUMBER WRONG
REFERR←←70 ;REFERENCE SUPPLY IS OFF,CHECK THE FUSE
PDPERR←←100 ;PDP-6 IS DOWN
ISERR←←200 ;PDP-6 SERVICE INTERRUPTED
ADBUS←←300 ;AD IS BUSY
XGPBUS←←400 ;XGP IS BUSY
SOLERR←←500 ;SOLUTION DOES NOT EXIST
SOJERR←←600 ;SOJG COUNT DOES NOT EXIST
XLIST
SUBTTL AC DEFINITIONS AND FLAGS LOU PAUL
LIST
; These are conditional assembly flags
BLUE←←0 ;assemble for blue arm
DEB←←0 ;causes the AC's to be saved each jiffy
TACH←←0 ;Integrates tach voltage and sets vgain
TRACK←←0 ;Causes a debugging file to be written
IFE TRACK,<
DYNAMICS←←0 ;CAUSES FORWARD AND FEEDBACK TO BE WRITTEN OUT
REPORT←←0+DYNAMICS ;Causes display data to be written
>
IFN TRACK,<
REPORT←←0
DYNAMICS←←0
>
SIMU←←0 ;Turns this program into a sail callable routine to
;simulate the arm
USER←←0+SIMU ;This runs the SPACEWAR job in user mode and simulates the arm
ADJG←←0 ;READS THE POT BOX TO SET SERVO GAINS
IFN ADJG,<ADJD←←0>
IFE ADJG,<
ADJD←←0 ;READS THE POT BOX TO SET DRIVE FACTORS
>
ADJUST←←ADJG+ADJD ;CAUSES THE POTS TO BE READ TO ADJUST GAINS
HANDWORK←←1 ;IF ZERO DOSN'T DRIVE THE HAND
ARMWORK←←1 ;IF ZERO RETURNS THE ARM DOWN MESSAGE
IFN SIMU,<
INTERNAL ARM.INIT,ARM.STEP
INTERNAL ARM.THETA,ARM.GRASP,ARM.TOUCH,ARM.FUNCTION
>
EXTERNAL JOBREN,JOBOPC,SOLVE,UPDATE,TIMES
IFN ADJUST,<EXTERNAL EXP>
OPDEF INTUUO [723B8]
OPDEF UFBRD [706B8]
; AC'S
BITS←←0
AC←1
TAC←2
MQ←3
I←5
J←6
K←7
L←10
DACVAL←11 ;CONTAINS THE A/D READING WITH THE SIGNBITS COMP'D
CBUF←12 ;POINTS TO CURRENT BUFFER
DATWD←13 ;ARM DATAO
DATA←14 ;DATA POINTER FOR DEBUGGING BUFFER
TAC1←15
P←17 ;PUSH DOWN POINTER
; CONSTANTS
PDLL←←20 ;LENGTH OF PUSH DOWN
MASTER←←16661 ;VERSION NUMBER
DBL←←6000 ;LENGTH OF DEBUGGING BUFFER
AD←←424 ;DEVICE AD
DB←←204 ;DEVICE 136
CLOCK←←730 ;DEVICE CLOCK
DEVT←←450 ;DEVICE TOOL
IFE BLUE,<
CHA←←62B23 ;JOINT 6 POT CHANNEL
CHA5←←61B23 ;JOINT 5 POT CHANNEL
N6CHA←←63B23 ;ALT JOINT 6 POT CHANNEL
HANDCHA←←70B23 ;HAND POT CHANNEL
ARM←←420 ;DEVICE ARM
WIDTH←←600 ;D/A TO SET PULSE WIDTHS
>
IFN BLUE,<
CHA←←36B23 ;JOINT 6 POT CHANNEL
CHA5←←35B23 ;JOINT 5 POT CHANNEL
N6CHA←←37B23 ;ALT JOINT 6 POT CHANNEL
HANDCHA←←40B23 ;HAND POT CHANNEL
ARM←←450 ;DEVICE ARM
>
MAXFN←←26 ;MAXIMUM NUMBER OF FUNCTIONS
JMPABS←←100 ;JUMP ABSOLUTE
SKPERR←←101 ;SKIP ON ERROR
SKPNER←←103 ;SKIPN ON ERROR
SKPSER←←104 ;SKIPS ON ERROR
JMPREL←←102 ;JUMP RELATIVE
NSCEL←←=50 ;NUMBER SAVE CELLS (CHANGE BY RCB 25 JAN)
NLCEL←←=50 ;NUMBER ASSIGN CELLS
IFN USER,<OPDEF DATAO [JFCL]>
; FLAGS WHICH RESIDE IN AC 0 OR IN BITSAV
DTST←←1 ;SPACE WAR JOB FINISHED
POTREAD←←2 ;READ POTS IN OCTAL+=1000, DO NOT CONVERT TO DEGREES
RONLY←←4 ;JUST READ POTS
FINAL←←10 ;NULL ARM ERRORS
RUN←←20 ;RUN ARM
INCREM←←40 ;INCREMENT SET POINT TOWARD DTH
DROP←←100 ;PLACE ARM DO NOT STOP IF ERRORS ARE ZERO
ALT6←←200 ;READ ALT POT 6
HCL←←400 ;INITIALIZATION FOR HAND FUNCTIONS
ALT←←1000 ;TRAJECTORY ALT PATH
STP←←2000 ;STOP ON FORCE LIMIT
TRIP←←4000 ;TURN ON ARM
REREAD←←10000 ;AD HAS HAD TO BE RESTARTED
STCH←←20000 ;STOP ON TOUCH
WOB←←100000 ;WOBBLE OUTER JOINTS
HOMEF←←200000 ;FUNCTION IS HOME
BOTH←←400000 ;MERGE
;FLAGS WHICH RESIDE IN THE LH OF DATWD
NNUL←←1 ;DO NOT NULL
INT←←2 ;INTERPOLATE CI AS THE ARM MOVES
NXTFN←←4 ;START NEXT FUNCTION NOW
;FLAGS IN LH OF INSTRUCTIONS
MERGE←←400 ;MERGE
RELOCF←←40
HOLDF←←20
DEC←←-4
XF←←1
XALL
XLIST
SUBTTL MESSAGE FORMAT LOU PAUL
LIST
; THIS IS THE 32 WORD MAIL MESSAGE
EXE: XWD MASTER,0 ;18-27 NARGS, 30 RELOC, 31 HOLD, 32 SOTCH, 33-35 EXE
;0 READ IN OCTAL
;1 READ IN DECIMAL
;2 EXECUTE FILE
;3 EXECUTE FUNCTION
FILE: 0
PPPN: 0
BAND: 0
SEGJOB: 0
NAME: 0
STATUS: 0
SEGMENT:0
NERVES: 0
ETOR: 0
THETA: 0
ARGS: BLOCK =6
STRING: BLOCK =15
XLIST
SUBTTL USER LEVEL CODE LOU PAUL
LIST
;START
IFN SIMU,< ;THIS IS SIMULATION ONLY
ARM.IN:
IFE BLUE,<MOVE 1,[SIXBIT/YELLOW/]>
IFN BLUE,<MOVE 1,[SIXBIT/BLUE/]>
CALLI 1,400002
SETZM INRUN
SETOM ARMINI ;INDICATES ARM.IN HAS BEEN CALLED
ARM.ST: SETO 1, ;INDICATES END OF RUN
SKIPN ARMINI
POPJ P,
MOVEM 16,SSAVE+16 ;SAVE SAIL AC'S EXCEPT FOR STACK
MOVEI 16,SSAVE
BLT 16,SSAVE+15
SKIPE INRUN
JRST[ HRLZI 16,MSAVE ;PUT BACK IN RUN AC'S
BLT 16,15
MOVE 16,MSAVE+16
JRST SSW] ;AND RETURN TO SPACE WAR
JRST GETMES
INRUN: 0 ;IN THE MIDDLE OF A RUN DO NEXT TICK
ARMINI: 0 ;ARM.IN HAS BEEN CALLED
SSAVE: BLOCK 17 ;SAIL AC'S
MSAVE: BLOCK 17 ;USER AC'S
WAIT: HRLZI 16,SSAVE ;PUT BACK AC'S
BLT 16,15
MOVE 16,SSAVE+16
SETZM INRUN
POPJ P,
GETMES: SETOM INRUN
>
IFE SIMU,<
START: MOVE P,[XWD -PDLL,UPDL]
IFE BLUE,<MOVE 1,[SIXBIT/YELLOW/]>
IFN BLUE,<MOVE 1,[SIXBIT/BLUE/]>
CALLI 1,400002
OUTSTR[ASCIZ/!
/]
WAIT:
>
WRCV EXE
HLRZ 5,EXE
CAIE 5,MASTER
JRST[ MOVEI 3,VERSN
JRST FINISH]
WAITED: MOVE 1,SEGJOB
HRRZM 1,JOB
HLRZM 1,SEG
IFN REPORT+TRACK,<
MOVE 1,[IOWD DBL+100,DATO]
MOVEM 1,DATPT ;DATA POINTER
MOVEM 1,DATIWD ;OUTPUT POINTER
>
SETZB 3,TRAJER
MOVEI 0,0
LDB 1,[POINT 3,EXE,35]
CAIG 1,1
JRST READ
IFE ARMWORK,<
MOVEI 3,NOTHER
JRST FINISH
>
IFN REPORT+TRACK,< ;WRITE OUT DATA
INIT 15,17
SIXBIT /DSK/
0
JRST NDM
MOVE 2,FILE
MOVEM 2,DFILE
MOVE 2,PPPN
MOVEM 2,DPPPN
IFN TRACK,<
SKIPE WALK
JRST[ LOOKUP 15,DFILE
JRST NDMS
MOVE 2,[IOWD DBL,DATO]
MOVEM 2,DATPT
INPUT 15,1
JRST EXFN]
>
ENTER 15,DFILE
JRST[NDMS:MOVEI 3,NODATA
SUB 17,[XWD 1,1]
JRST FINISH]
>
EXFN: CAIN 1,3
JRST[ MOVE 4,EXE
TRNN 4,HOLDF
JRST [ SKIPE ARGS
SOS JUMPBK
JRST MOVON]
SOS 1,STKPTR
MOVEI 2,(1)
LDB 3,[POINT 9,EXE,26]
SUBI 1,(3)
HRLI 1,ARGS
BLT 1,(2)
TRNE 4,RELOCF
JRST[ MOVE 1,STKPTR
SUBI 1,(3)
SUB 1,CBUFS
HRRM 1,@STKPTR
JRST BPTR]
BPTR: SOS STKPTR
MOVON: SETOM FUNCT
JRST SSW]
CAIE 1,2
JRST[ MOVEI 3,INVMES
JRST FINISH]
SETZM FUNCT
HRREI 2,BUF-1001
MOVEM 2,CBUFS
SETOM BUF
SETZM DOING ;TRAJECTORY SET UP FOR
SETZM LCOUNT
MOVE 2,[XWD LCOUNT,LCOUNT+1]
BLT 2,LNAME+NLCEL-1
SKIPE BAND
JRST[ MOVEI 1,BUF
MOVEM 1,GOODIE
MOVEI 1,1001
MOVEM 1,GOODIE+1
SETZM GOODIE+2
MOVE 14,BAND
UFBRD 14,GOODIE
JRST RE
SKIPN BUF+1000
JRST[ SETZM BLOCKS
MOVEI 1,BUF2
MOVEM 1,NXTBUF
SETZM @NXTBUF
JRST ZDTH]
MOVEI 1,BUF2
MOVEM 1,GOODIE
MOVEI 1,20
MOVEM 1,GOODIE+2
UFBRD 14,GOODIE
JRST RE
MOVEI 1,=74
SKIPN BUF2+1000
MOVEI 1,0
MOVEM 1,BLOCKS
MOVEI 1,40
MOVEM 1,GOODIE+2
MOVEI 1,BUF
MOVEM 1,NXTBUF
MOVNS BUF2
JRST ZDTH]
MOVE 1,FILE
MOVEM 1,LFILE
MOVE 1,PPPN
MOVEM 1,LPPPN
INIT 16,17
SIXBIT/DSK/
XWD 0,0
JRST[NDM: MOVEI 3,NODEV
JRST FINISH]
LOOKUP 16,LFILE
JRST[ MOVEI 3,NOFILE
JRST FINISH]
MOVS 1,LPPPN ;FILE LENGTH
MOVN 1,1
ASH 1,-11
MOVEM 1,BLOCKS
SOSGE BLOCKS
JRST FINISH
MOVE 10,[IOWD 1000,BUF]
SETZ 11,
IN 16,10
JRST[ SOSGE BLOCKS
JRST[ MOVEI 1,BUF2
MOVEM 1,NXTBUF
SETZM @NXTBUF
JRST ZDTH]
ADDI 10,1001
IN 16,10
JRST[ MOVEI 1,BUF
MOVEM 1,NXTBUF
MOVNS BUF2
JRST ZDTH]
JRST RE]
JRST RE
ZDTH:
MOVE 1,[XWD DELTH,DELTH+1]
SETZM DELTH
BLT 1,DELTH+5
MOVEI 1,=60
MOVEM 1,STWT
MOVNS BUF
HLRZ 1,BUF
CAIE 1,MASTER
JRST[ MOVEI 3,VERSN
JRST FINISH]
SSW:
IFE USER+TRACK,<LOCK 1,>
PUSHJ P,SPACE
WWS:
IFE REPORT+TRACK<
IFE USER<
MOVEI 1,1
CALLI 1,31
>
>
MOVE BITSAV
TRNE DTST
JRST BACK
MOVE 1,@NXTBUF
JUMPGE 1,.+2 ;MORE TRAJECTORY TO COME
JRST[ SOSGE BLOCKS
JRST[ SETZM @NXTBUF ;ALL DONE MAKK THIS AS LAST
RELEASE 16,
JRST WDO]
SKIPE BAND
JRST[ MOVE 1,NXTBUF
MOVEM 1,GOODIE
UFBRD 14,GOODIE
JRST RBD
MOVE 1,NXTBUF
SKIPN 1000(1)
SETZM BLOCKS
MOVEI 1,20
ADDM 1,GOODIE+2
JRST ROK]
MOVE 10,NXTBUF
SOJ 10,
HRLI 10,-1000
IN 16,10
JRST[ROK:MOVE 1,NXTBUF
MOVNS (1)
ADDI 1,1001
CAILE 1,BUF2
MOVEI 1,BUF
MOVEM 1,NXTBUF
JRST WDO]
RBD: MOVE 1,NXTBUF ;READ ERROR
SETZM @NXTBUF ;MARK AS LAST
WFF: MOVE BITSAV ;AND WAIT FOR IT TO END
TRNN DTST
JRST WFF
RE: MOVEI 3,REAERR
JRST BACK]
WDO:
IFN SIMU,<
MOVEM 16,MSAVE+16
MOVEI 16,MSAVE
BLT 16,MSAVE+15
HRLZI 16,SSAVE
BLT 16,15
MOVE 16,SSAVE+16
SETZ 1,
POPJ P,
>
IFE REPORT+TRACK,<
IFE USER,<JRST WWS>
IFN USER,<JRST SSW>
>
IFN TRACK,<
SKIPE WALK
JRST SSW
>
IFN REPORT+TRACK,<
HRRZ 1,DATIWD ;START TO WRITE
CAIL 1,DATO+DBL-1
JRST DOD
HRRZ 2,DATPT ;LAST LOC FILLED
WA: SUBI 2,(1)
JUMPL 2,[MOVEI 2,DATO+DBL-1
JRST WA]
TRZ 2,177
JUMPN 2,[ MOVN 1,2 ;MORE THAN 200 WORDS SO WRITE IT OUT
HRLM 1,DATIWD ;NEG WORD COUNT
OUT 15,DATIWD
HRRZ 1,DATIWD
ADDI 1,(2)
HRRM 1,DATIWD
JRST DOD]
DOD:
IFE USER,<JRST WWS>
IFN USER,<JRST SSW>
>
BACK:
IFE USER+TRACK,<UNLOCK 1,>
SPCWAR 636367
MOVEI 0,0
SKIPE 3,TRAJER
JRST[ IFE DEB+SIMU,<
IFN TRACK,<SKIPN WALK>
TRO RONLY
MOVEM BITSAV
MOVEI 1,1
CALLI 1,31
DRSW: PUSHJ P,SPACE
DRR: MOVE BITSAV
TRNN DTST
IFE USER,<JRST DRR>
IFN USER,<JRST DRSW>
SPCWAR 636367
MOVEI 0,0
PUSHJ P,SETSET
>
JRST NOERR]
IFN SIMU,<PUSHJ P,SETSET>
NOERR: IFE USER,<RELEASE 17,
RELEASE 14,
>
IFN REPORT+TRACK,<
PUSHJ P,CLODAT
CLOSE 15,
>
SKIPN SEG
JRST[ MOVEM 3,STATUS
MOVE 2,[XWD TH,THETA]
BLT 2,THETA+6
MOVE 1,JOB
MOVEM 1,REPLY
SEND REPLY
JRST WAIT
JRST WAIT]
MOVE 2,SEG
CALLI 2,400016
JRST WAIT
HRRZ 4,NAME
MOVE 2,(4)
HLRZ 4,NAME
MOVEM 2,(4)
PUSHJ P,[SETNAM:MOVE 2,THETA
MOVEI 4,6(2)
HRLI 2,TH
IFN TRACK,<SKIPN WALK>
BLT 2,(4)
MOVE 2,ETOR
MOVEI 4,=14(2)
HRLI 2,STRING
BLT 2,(4)
PUSHJ P,SETFLT
MOVEM 3,@STATUS
MOVE 4,DOING
MOVEM 4,@SEGMENT
HRRZ 2,NAME
SETZM (2)
HRLZI 2,40
MOVEM 2,IBIT
INTUUO 4,JOB
JUMP
MOVEI 2,0
CORE2 2,
JFCL
POPJ P,]
JRST WAIT
IFN REPORT+TRACK,<
CLODAT:IFN TRACK,<
SKIPE WALK
POPJ P,
>
NWI: HRRZ 1,DATIWD
HRRZ 2,DATPT
SUBI 2,(1)
JUMPL 2,[ HRRZI 2,DATO+DBL-1
SUBI 2,(1)
MOVN 2,2
HRLM 2,DATIWD
SKIPE 2
OUT 15,DATIWD
MOVEI 2,DATO-1
HRRM 2,DATIWD
JRST NWI]
ADDI 2,200
TRZ 2,177
MOVN 1,2
HRLM 1,DATIWD
OUT 15,DATIWD
POPJ P,
>
READ: SETZM STWT
SKIPG 1
TRO POTREAD
TRO RONLY
RSW: PUSHJ P,SPACE
RSWW: MOVE BITSAV
TRNN DTST
IFE USER,<JRST RSWW>
IFN USER,<JRST RSW>
MOVE 3,TRAJER
PUSHJ P,SETSET
JRST FINISH
SPACE: MOVEI 1,=180
MOVEM 1,COUNT
TRO TRIP
LDB 1,[POINT 1,EXE,32]
MOVEM 1,SOTCHS
JUMPE 1,.+2
TRO STCH
IFN DEB,<SETZM ETIM>
SETZM STRING
MOVEM BITSAV
IFN TRACK,<SKIPE WALK>
IFN TRACK+USER,<
JRST[ MOVEM 17,USAVE+17
MOVEI 17,USAVE
BLT 17,USAVE+16
JSR STRADR-1
HRLZI 17,USAVE
BLT 17,16
MOVE 17,USAVE+17
POPJ P,]
>
IFE USER,<
GETAD: INIT 17,417
SIXBIT /AD/
XWD 0,0
JRST[ POP P,3
MOVEI 3,ADBUS
JRST FINISH]
INIT 14,417 ;GET THE XGP IF ITS FREE
SIXBIT /XGP/
XWD 0,0
JRST .+1
MOVE 1,[XWD 240001,STRADR]
CALLI 1,400003
>
POPJ P,
UPDL: FINISH
BLOCK PDLL
IFN USER+TRACK,<
USAVE: BLOCK 20
>
IFN TRACK,<WALK:0>
IFN REPORT+TRACK,<
DFILE: 0
SIXBIT/TMP/
0
DPPPN: 0
>
LFILE: 0
SIXBIT/TRJ/
0
LPPPN: 0
GOODIE: BLOCK 3
FINISH: SPCWAR 636367
IFE USER,<RELEASE 17,
RELEASE 14,
>
SKIPE SEG
JRST [ATSEG: MOVE 1,SEG
CALLI 1,400016
JRST WAIT
PUSHJ P,SETNAM
JRST WAIT]
MOVEM 3,STATUS
MOVE 1,[XWD TH,THETA]
BLT 1,THETA+6
SETZM STRING
MOVE 1,JOB
MOVEM 1,REPLY
SKIPN 1
JRST WAITED
SEND REPLY
JRST WAIT
JRST WAIT
REPLY: 0
EXE
SEG: 0
SOTCH: 0
JOB: 0
IBIT: 000040000000
TICKS: 0
SETFLT: SKIPN NERVES
POPJ P,
MOVEI 6,1
MOVE 4,NERVES
STL: MOVE 5,OBS(6)
MOVEM 5,(4)
ADDI 4,=16
SOJGE 6,STL
POPJ P,
XLIST
SUBTTL SPACEWAR CODE CONTROL LOU PAUL
LIST
;SPACEWAR CODE
IFN USER+TRACK,<0>
STRADR: MOVE P,[XWD -PDLL,PDL] ;PUSH DOWN STACK
PUSHJ P,ACREST ;Enters here every 1/60 th. seccond
IFE USER+TRACK,<
TRNE DTST
CALLI 400024
IFE BLUE,<DATAO ARM,[2]> IFN BLUE,<CONO ARM,0>
SOSLE STWT
CALLI 400024
>
IFE BLUE,<IORI DATWD,2 ;YELLOW ARM>
IFN USER+TRACK,<
TRNE DTST
JRST SWDONE
>
IFE USER,<
IFN TRACK,<
SKIPE WALK
JRST NCHK
>
CONSZ 40 ;CHECK TO SEE IF ON PDP-6
JRST[ MOVEI TAC,PDPERR
MOVEM TAC,TRAJER
JRST TOFF]
CONI 0,AC
ANDI AC,7
CONO 0,2050(AC)
>
TRZE TRIP ;TURN ON ARM
JRST[
IFE BLUE,< DATAO ARM,[3]>
IFN BLUE,< CONO ARM,1>
NCHK:
IFE BLUE,< MOVEI K,51B23 ;-10 VOLT REFERENCE>
IFN BLUE,< MOVEI K,50B23 ;-10 VOLT REFERENCE>
PUSHJ P,PREAD ;REFTR← -10 volt reference
LDB AC,SNUM ;PICK UP MIDDLE SAMPLE
ANDI DACVAL,7777 ;LEAVE LAST SAMPLE IN J
ADDI AC,(DACVAL) ;ADD THEM TOGETHER
CAIGE AC,17000 ;IS THE FUSE BLOWN
JRST[ MOVEI TAC,REFERR
MOVEM TAC,TRAJER
JRST TOFF]
MOVEM AC,REFTR ;REFERENCE READING
MOVEI I,5 ;FIRST THREE TACHS
ZVEL: MOVE K,VCHAN(I)
JUMPE K,ZVELE
PUSHJ P,PREAD
LDB AC,SNUM
ANDI DACVAL,7777
ADDI AC,(DACVAL)
MOVEM AC,VZ(I)
ZVELE: SOJGE I,ZVEL
SETZM MOVT
JRST .+1]
IFN TRACK,<
SKIPE WALK
JRST TOK
>
MOVEI AC,=16666
MOVEM AC,ETIME
MOVSI AC,(1.0)
MOVEM AC,TDF
IFE USER,<
CONI CLOCK,AC
TLZ AC,777774
JRST STIME ;TIME IN MICRO SECONDS
>
IFN USER,<JRST .+2>
NXTJIF:
IFN USER,<JRST SWDONE>
IFN DEB<
MOVEM 17,ACSAV+17
MOVEI 17,ACSAV
BLT 17,ACSAV+16
MOVE 17,ACSAV+17
>
IFN TRACK,<
SKIPE WALK
JRST TOK
>
IFN REPORT+TRACK,<
HRRZI TAC,(DATA)
CAIL TAC,DATO+DBL-1
JRST[ SUB DATA,[XWD DBL,DBL]
MOVE TAC,[XWD DATO+DBL,DATO]
BLT TAC,(DATA)
HRRZI AC,(DATA)
HRRZ TAC,DATIWD
SUBI AC,(TAC)
JRST RDP]
HRRZI AC,(DATA)
HRRZ TAC,DATIWD
SUBI AC,(TAC)
HRRZ MQ,DATPT
SUBI TAC,(MQ)
IMUL AC,TAC
RDP: SKIPLE AC
IFN TRACK,<PUSH DATA,[0]>
IFN REPORT,<PUSH DATA,[SIXBIT/ERROR/]>
MOVEI AC,DATO-1
HRRZ TAC,DATIWD
CAIL TAC,DATO+DBL-1
HRRM AC,DATIWD
MOVEM DATA,DATPT
>
IFE USER,<
MOVEI TAC,=2000
WATSTL: CONI CLOCK,AC
TLZ AC,777774
SUB AC,LTIME
JUMPGE AC,.+2
ADD AC,[=1000000]
IFN REPORT,<
CAIN TAC,=2000
JRST[ PUSH DATA,[<SIXBIT/TICK/>+1]
PUSH DATA,AC
JRST .+1]
>
MOVEM AC,ETIME
CAIGE AC,=16667 ;delta T greater than 16.7 msec.?
SOJGE TAC,WATSTL
DWAIT: JUMPL TAC,TE
MOVE MQ,AC
FSC MQ,233
FMPR MQ,[0.00006]
MOVEM MQ,TDF
MOVE AC,LTIME
ADD AC,ETIME
TLNE AC,777774
SUB AC,[=1000000]
STIME: MOVEM AC,LTIME ;LTIME←LTIME+16.7 msec.
>
SOSGE COUNT
JRST[TE:MOVEI AC,TERR
MOVEM AC,TRAJER
JRST ZITO]
IFN ADJUST,<
MOVEI K,14B23
MOVEM BITSAV
MOVEI I,2
RNP: PUSHJ P,PREAD
LDB AC,SNUM
FSC AC,221
JSA 16,EXP
JUMP AC
CAMG [1.2]
SETZ 0,
FMPR [0.20]
MOVEM FACTOR(I)
SOJGE I,RNP
MOVE BITSAV
MOVE I,ADJI
JUMPL I,MAIN
IFN ADJG,<
MOVE AC,ADJV
FMPR AC,FACTOR
MOVEM AC,KV(I)
MOVE AC,ADJE
FMPR AC,FACTOR+1
MOVEM AC,KE(I) ;POT 13
MOVE AC,ADJIF
FMPR AC,FACTOR+2
MOVEM AC,KI(I) ;POT 14
>
IFN ADJD,<
MOVE AC,ADJE
FMPR AC,FACTOR
MOVEM AC,KM(I) ;POT 12
MOVE AC,ADJV
FMPR AC,FACTOR+1
MOVEM AC,PK(I) ;POT 13
>
>
MAIN: SKIPE MOVT ;NO MOVING RESTORE
JRST[ MOVE AC,ETIME
ADDB AC,MOVTIM
ASH AC,-16
FSC AC,233
MOVEI I,2
MOVE K,MOVT
MOV4: MOVE TAC,MOVV(I)
FMPR TAC,AC
MOVEM TAC,13(K)
SUBI K,4
SOJGE I,MOV4
JRST .+1]
TRNE RUN
JRST[ PUSHJ P,EVAL
PUSHJ P,NXTH
JRST .+1]
MOVEI J,6
PUSHJ P,ANGLES ;read joint angles
TRNE RONLY ;read angles only?
JRST[ PUSHJ P,HEAD ;read hand also
MOVE AC,HAND
MOVEM AC,SET
PUSHJ P,REFLEX
PUSHJ P,READED] ;DOES NOT RETURN
TRNN RUN
JRST[ SKIPG TAC,FUNCT ;not run, mabye a function
PUSHJ P,SETSET
JUMPL TAC,NEXT
JUMPE TAC,[CAIL CBUF,BUF;try next buffer
SETOM (CBUF) ;dont do this if first buffer
MOVEM CBUF,CBUFS
ADDI CBUF,1001
CAILE CBUF,BUF2
MOVEI CBUF,BUF ;Advance buffer
MOVE 2,(CBUF)
JUMPL 2,[BUFWT:MOVE CBUF,CBUFS;wait for buffer
JRST SWDONE]
JUMPN 2,BUFRDY ;the last buffer stop.
JRST[ TRO DTST
MOVEI 2,WAITIN
HRRM 2,JUMPBK
MOVEM 2,STKPTR
IFN REPORT,<PUSH DATA,[0]>
JRST BUFWT]
BUFRDY: HRRZ 2,(CBUF)
ADDI 2,-1(CBUF)
HRRZM 2,STKPTR
JRST NEXT]
CAIN TAC,6
JRST SETCH
JRST TT] ;otherwise perform function
JUMPE J,[RUDONE:
PUSHJ P,SETSET
TRZ DROP+RUN+FINAL+WOB+HOMEF ;if J is zero then end of run
TDZ DATWD,[770001252500]
IFN BLUE,< SETZM MOTDAT
MOVE AC,MOTDAT+1
TLZ AC,774000
MOVEM AC,MOTDAT+1
>
TRZE STP
JRST[ MOVEI TAC,STPERR
MOVEM TAC,TRAJER
POP P,TAC
JRST TOFF]
SKIPN AC,FUNCT
JRST NEXT
CAIN AC,22
JRST[ TRZ HCL
SETZ AC,
DPB AC,[POINT 7,TDAT,20]
SETZM FUNCT
DATAO DEVT,TDAT
JRST NEXT]
MOVEI AC,=16667
MOVEM AC,ETIME
JRST .+1]
TT: PUSHJ P,REFLEX
DISP: MOVE AC,FUNCT
JUMPL AC,.+2
CAILE AC,MAXFN
JRST[ MOVEI TAC,FUNERR
MOVEM TAC,TRAJER
JRST TOFF]
JRST @.+1(AC) ;Perform function
NXTJIF ;0
HOPEN ;1
HCLOSE ;2
NXTJIF ;3
PLACE ;4
NUDGE ;5
SETCH ;6
STOP ;7
SAVE ;10
RESTORE ;11
CENTER ;12
SET.ARM ;13 SET_ARM
WOBBLE ;14
SEARCH ;15
AOJI ;16
IKU ;17 TO
HOME ;20
PATH ;21
TOOL ;22
DRIVE ;23
MOVING ;24
ASSIGN ;25
SOJGI ;26
XLIST
SUBTTL SPACEWAR CODE ANGLE MEASUREMENT LOU PAUL
LIST
ANGLES: MOVEI I,5
JFCL 10,.+1
MOVEI L,10
SETCHA: MOVEI K,CHA
TRNE ALT6
MOVEI K,N6CHA
SKIPA
RSTRT: MOVE K,CHAN(I)
SOJL L,REDER
IFE USER,<
PUSHJ P,PREAD
LDB AC,SNUM
CAIN I,5
JRST[ TRNE POTREAD
JRST .+1
CAIL AC,1000
CAILE AC,7000
JRST[ TRC ALT6
JRST SETCHA]
MOVEI K,CHA5
JRST .+1]
ANDI DACVAL,7777
ADDI AC,(DACVAL)
SETZ TAC,
DIV AC,REFTR
ASH AC,-26
MOVE TAC1,AC
TRNE POTREAD
JRST[ ADDI TAC1,=1000
JRST EXON]
ASHC AC,-11 ;LEAVE INDEX INTO NON-LINEAR DIFF TABLE IN AC
LDB MQ,NON(I) ;GET LOWER DIFF
ADDI TAC1,(MQ) ;ADD IT TO READING
AOJ AC,
LDB AC,NON(I) ;GET UPPER DIFFERENCE
SUBI AC,(MQ)
MUL TAC,AC ;INTERPOLATE
ADD TAC1,TAC ;CORRECTED READING
FSC TAC1,226 ;FLOAT
FMPR TAC1,SCALE(I)
FADR TAC1,OFF(I)
>
IFN USER,<MOVE TAC1,TH(I)>
CAIN I,5
JRST[ TRNE ALT6
FADR TAC1,OFF6
FADR TAC1,ROT6
MOVEM TAC1,TH+5
FSBR TAC1,T0+5
MOVSI MQ,(180.0)
CAML TAC1,MQ
JRST[ INCROT: MOVN MQ,MQ
FSC MQ,1
FADRM MQ,ROT6
FADRM MQ,TH+5
JRST THS]
MOVN MQ,MQ
CAMG TAC1,MQ
JRST INCROT
JRST THS]
EXON: MOVEM TAC1,TH(I) ;THETA
THS:
IFN REPORT,<
MOVE MQ,TH(I)
FSBR MQ,T0(I)
SPOS: MOVEM MQ,JER(I)
>
MOVE TAC1,TH(I)
EXCH TAC1,THP(I)
MOVE K,VCHAN(I)
IFE USER,<JUMPN K,.+2>
JRST[DIFPOS:
FSBR TAC1,THP(I)
FDVR TAC1,TDF
MOVNM TAC1,TD(I)
JRST SERVO]
NVEL: PUSHJ P,PREAD
LDB AC,SNUM
ANDI DACVAL,7777
ADDI AC,(DACVAL)
CAIG AC,17000
CAIG AC,776
JRST DIFPOS
SUB AC,VZ(I)
FSC AC,216
FMPR AC,VSCALE(I)
MOVEM AC,TD(I)
XLIST
SUBTTL SPACEWAR CODE SERVO CALC. LOU PAUL
LIST
SERVO: TRNN RUN
JRST[ SOJGE I,RSTRT
POPJ P,]
SERVL: MOVE TAC,TH(I)
FSBR TAC,T0(I) ;POSITION ERROR
MOVEM TAC,ET0(I)
TRNE FINAL
JRST NULL ;MODIFY THETA BY INTEGRAL TERM
MOVE TAC1,T0(I)
FSBR TAC1,T0P(I)
FDVR TAC1,TDF
MOVE AC,TAC1
FSBR AC,TDP(I)
MOVEM TAC1,TDP(I)
FDVR AC,TDF
MOVEM AC,TDD(I)
FMPR AC,CII(I)
MODT0: HRRZ K,BMASK(I)
TDNN K,FBI
JRST [ PDIR:SETZM ET0(I)
FMPR AC,CII(I)
JRST NOBACK]
FADRM TAC,ERRINT(I)
MOVN TAC,TD(I)
FADR TAC,TAC1
IFN REPORT,<SVEL:MOVNM TAC,VER(I)>
FMPR TAC,KV(I) ;VELOCITY GAIN
FADR AC,TAC
FMPR AC,CII(I)
MOVN TAC,ET0(I)
FMPR TAC,KE(I) ;ERROR GAIN
FADR AC,TAC
MOVN TAC,ERRINT(I)
FMPR TAC,KI(I)
FDVR TAC,CII(I)
FADR AC,TAC
NOBACK: CAIE I,2
FMPR AC,[IRAD:0.0174532925] ;JOINT 3 IS IN INCHES
MOVEM AC,TORE(I)
FADR AC,CI(I) ;GRAVITY TERM
MOVEM AC,T(I) ;ERROR CORRECTION TORQUE
XLIST
SUBTTL SPACEWAR CODE DRIVE CALC. LOU PAUL
LIST
;DRIVE THE ARM
LS0: TDNN DATWD,BMASK(I)
JRST ISP
MOVE MQ,TD(I)
JUMPN MQ,.+2
MOVN MQ,ET0(I)
FMPR MQ,T(I)
JUMPL MQ,[ MOVM MQ,T(I)
FSBR MQ,F0(I)
JUMPL MQ,[ FDVR MQ,F0(I)
FMPR MQ,V0(I)
FSC MQ,1
FADR MQ,V0(I)
SKIPGE T(I)
MOVN MQ,MQ
JRST CEMF]
MOVE AC,KM(I)
FSBR AC,PK(I)
FMPR MQ,AC
FADR MQ,V0(I)
SKIPG T(I)
MOVN MQ,MQ
JRST CEMF]
SKIPN T(I)
JRST[ SKIPN TD(I)
JRST CEMF
MOVE MQ,V0(I)
SKIPGE TD(I)
MOVN MQ,MQ
JRST CEMF]
JUMPE MQ,NOEX
MOVE MQ,V0(I)
SKIPGE T(I)
MOVN MQ,MQ
NOEX: MOVE AC,KM(I)
FADR AC,PK(I)
FMPR AC,T(I)
FADR MQ,AC
CEMF:
IFE BLUE,<
MOVE AC,EMF(I)
FMPR AC,TD(I)
MOVSI TAC1,(30.0)
JUMPGE MQ,DRVLT
MOVN AC,AC
DRVLT: FSBR TAC1,AC ;Available drive voltage
CAMGE TAC1,[1.0]
JRST MAXDRV
VELOK: MOVM AC,MQ
FDVR AC,TAC1 ;AC= REL TIME ON
FIX AC,211000 ;1=16
CAML AC,[4000000]
JRST DHO ;too much force stop the arm
CAILE AC,776000
MAXDRV: MOVEI AC,776000
IFN REPORT+TRACK+USER+DEB,<
MOVEM AC,MOTOR(I)
SKIPGE MQ
MOVNS MOTOR(I)
>
TRC AC,400000
HRL AC,I
SETDRV:
IFN TRACK,<SKIPN WALK>
DATAO WIDTH,AC
TDZ DATWD,DMASK(I)
JUMPGE MQ,ISP
TDO DATWD,DMASK(I)
ISP: SKIPE REV(I)
TDC DATWD,DMASK(I)
DATAO ARM,DATWD
SOJGE I,RSTRT
>
IFN BLUE,<
FIX MQ,225000 ;1=16
IFN REPORT+TRACK+USER+DEB,<
MOVEM MQ,MOTOR(I)
>
MOVM AC,MQ
CAIL AC,200
JRST DHO ;too much force stop the arm
SKIPE REV(I)
MOVN MQ,MQ
PUSH P,MQ
PUSHJ P,MOTDRV
ISP: SOJGE I,RSTRT
>
JFCL 10,DHO
IFN TRACK,<SKIPN WALK>
;STOP ON FORCE
IFN SIMU,< ;IF IN SIMU PREDICT NEXT VALUE OF THETA
MOVEI I,5
PNT: MOVE AC,T0(I) ;PRESENT VALUE
FSC AC,1 ;X 2
FSBR AC,T0P(I) ;PREVIOUS VALUE
MOVEM AC,TH(I) ;IS NEXT VALUE
SOJGE I,PNT
>
IFN REPORT,< ;OUTPUT ERRORS AND DRIVES
HRLI AC,PBLK
HRRI AC,1(DATA)
ADD DATA,[XWD 25,25]
BLT AC,(DATA)
>
SETZM ASTP
TRNE STP
JRST[ MOVEI I,5
MTL: MOVE MQ,TORE(I)
FDVR MQ,F0(I)
SKIPN TD(I)
FSC MQ,-2
HRRZ K,BMASK(I)
TDNN K,FBI
MOVE MQ,STQ(I)
FMPR MQ,STQ(I)
FADRM MQ,ASTP
SOJGE I,MTL
MOVE AC,ASTP
CAML AC,SDTQ
JRST[ AOS AC,ASTPP
CAIL AC,2
JRST[ TRZ STP
SUB P,[XWD 1,1]
SETZM ERRINT
MOVE AC,[XWD ERRINT, ERRINT+1]
BLT AC,ERRINT+5
JRST RUDONE]
POPJ P,]
SETZM ASTPP
POPJ P,]
POPJ P,
NULL: SETZB AC,TAC1
TLNN DATWD,NNUL
TRNE WOB
SOJA J,MODT0
TDNN DATWD,GMASK(I)
SOJA J,LS0
MOVE MQ,FBI
TDNN MQ,GMASK(I)
SOJA J,PDIR
MOVM MQ,TAC ;|POSITION ERROR|
CAMLE MQ,ERR(I) ;COMPARE POSITION ERROR
JRST MODT0
MOVM MQ,TD(I)
CAMLE MQ,ERR(I)
JRST MODT0
SO: TDZ DATWD,BMASK(I)
IFN REPORT+TRACK+USER+DEB,<SETZM MOTOR(I)>
IFE BLUE,<
DATAO ARM,DATWD
HRLZ MQ,I
TRC MQ,400000
DATAO WIDTH,MQ
>
IFN BLUE,<PUSHJ P,MOTSTP>
SOJA J,LS0
POPJ P,
XLIST
SUBTTL SPACEWAR CODE LOU PAUL
LIST
NXTH: MOVE AC,[XWD T0,T0P]
BLT AC,T0P+5
TRNE WOB
JRST[ MOVEI I,2
WL1: SOSGE J,WOBCNT(I)
JRST[ MOVEI J,=19
MOVEM J,WOBCNT(I)
JRST WL2]
WL2: MOVE AC,SIN(J)
FMPR AC,WOBMAG
FADRM AC,TFF+3(I)
SOJGE I,WL1
JRST .+1]
TRNE DROP
JRST[ MOVEI I,5
OL: MOVE AC,DELTH(I)
FMPR AC,TDF
FADRM AC,DTH(I)
SOJGE I,OL
JRST JALS]
NTH:
TRNE INCREM
JRST[ MOVE MQ,ETIME
ADDB MQ,TICKS
CAML MQ,NTICKS
JRST[ TRNE HOMEF
JRST[
SOSGE TAC,HOMEC
JRST FINC
SUB MQ,NTICKS
MOVEM MQ,TICKS
MOVEI I,5
NXUD: MOVE AC,DELTH(I)
FADRM AC,DTH(I)
SOJGE I,NXUD
JUMPN TAC,[
MOVEI I,5
NXMS: MOVE AC,THM(I)
MOVEM AC,DELTH(I)
SOJGE I,NXMS
MOVE AC,TIMM
JRST NXSS]
MOVEI I,5
NXFS: MOVE AC,THF(I)
MOVEM AC,DELTH(I)
SOJGE I,NXFS
MOVE AC,TIMF
NXSS: MOVEM AC,NTICKS
ASH AC,-15
ADDI AC,=60
MOVEM AC,COUNT
MOVEI AC,7
ADDB AC,HDP
PUSHJ P,UPDC
JRST NXIN]
FINC: TRZ INCREM
SKIPN TP
TRO FINAL
MOVEI AC,=600
MOVEM AC,COUNT
SKIPN TP(I)
TLNN DATWD,INT
JRST FIL1
MOVE AC,[XWD NC,CI]
BLT AC,CII+5
FIL1: MOVEI I,5
FIL: MOVE AC,DELTH(I)
FADRB AC,DTH(I)
FADR AC,TFF(I)
MOVEM AC,T0(I)
SETZM DELTH(I)
SOJGE I,FIL
POPJ P,]
NXIN: SETZ I,
DIV MQ,NTICKS
ASH MQ,-10
FSC MQ,200
MOVSI AC,(6.0)
FMPR AC,MQ
FADR AC,[-15.0]
FMPR AC,MQ
FADR AC,[10.0]
FMPR AC,MQ
FMPR MQ,MQ
FMPR MQ,AC
MOVEI I,5
LDC: MOVE AC,DELTH(I)
FMPR AC,MQ
FADR AC,DTH(I)
FADR AC,TFF(I)
MOVEM AC,T0(I)
SKIPN TP
TLNN DATWD,INT
JRST LDC1
MOVE AC,DCI(I)
FMPR AC,MQ
FADR AC,PC(I)
MOVEM AC,CI(I)
MOVE AC,DCII(I)
FMPR AC,MQ
FADR AC,PCC(I)
MOVEM AC,CII(I)
LDC1: SOJGE I,LDC
POPJ P,]
JALS: MOVEI I,5
JAL: MOVE AC,DTH(I)
FADR AC,TFF(I)
MOVEM AC,T0(I)
SOJGE I,JAL
POPJ P,
EVAL: MOVEI I,5
EL: MOVE J,TP(I) ;POINTS TO KOE5
JUMPE J,NE
MOVE MQ,ETIME
ADDB MQ,TJ(I)
CAML MQ,TN(I) ;NUMBER OF TICKS THIS SEGMENT
JRST[ ;END OF SEGMENT
CAIN I,5
JRST[ ;JOINT 6 HAS CONTROL WORD
MOVE TAC,TICKS
CAMGE TAC,NTICKS
TRO INCREM
LDB TAC,[POINT 3,1(J),2] ;LEVEL
JUMPN TAC,[ ;SWITCH POINT
SKIPG LOOP(TAC)
JRST[ ;INITIALIZE LOOP
LDB AC,[POINT 15,1(J),17]
MOVEM AC,LOOP(TAC) ;COUNT
JRST SETALT]
SOSLE LOOP(TAC) ;IN LOOP
SETALT: TRO ALT
JRST GETNXT]
JRST GETNXT]
GETNXT: TRNE ALT
JRST[ LDB J,[POINT 9,(J),8] ;ALT POINTER
JRST GOT]
LDB J,[POINT 9,(J),17] ;NEXT POINTER
JUMPE J,[SETZM TP(I)
TRO FINAL
MOVEI AC,=600
MOVEM AC,COUNT
MOVE TAC,[XWD NC,CI]
BLT TAC,CI+=11
MOVE AC,A4(I)
ADD AC,A3(I)
ADD AC,A2(I)
ADD AC,A1(I)
ADD AC,A0(I)
XOR AC,SC(I)
FSC AC,0
MOVEM AC,TFF(I)
JRST NE]
GOT: ADDI J,(CBUF)
MOVEM J,TP(I)
SUB MQ,TN(I) ;MICRO SEC INTO NEW SEGMENT
MOVEM MQ,TJ(I) ;INITIALIZE
HRRZ AC,(J)
ASH AC,16
MOVEM AC,TN(I)
CAIN I,5
JRST[
HRRZ AC,1(J)
ADDI AC,(CBUF)
MOVEI MQ,6(AC)
MOVEI K,5
MOVE MQ,(MQ) ;NEW DATWD
FTF: MOVE TAC,GMASK(K)
TDNN TAC,FBI
JRST[ TDNN TAC,MQ ;WAS FREE
JRST FNF ;STILL FREE
MOVE TAC,TH(K)
MOVEM TAC,T0(K)
FSBR TAC,TFF(K)
MOVEM TAC,DTH(K)
MOVNM TAC,DELTH(K)
MOVE TAC,TN+5
ASH TAC,16
MOVEM TAC,NTICKS
SETZM TICKS
TRO INCREM
JRST FNF]
TDNN TAC,MQ ;NOT FREE
JRST[ MOVE TAC,TDD(K) ;NOW IS FREE
CAIE K,2
FMPR TAC,IRAD
FMPR TAC,CII(K)
FMPR TAC,CII(K)
FSBR TAC,T(K)
MOVNM TAC,NC(K)
JRST FNF]
FNF: SOJGE K,FTF
PUSHJ P,UPDC
JRST DDELC]
DDELC: HLRE AC,-3(J)
MOVEM AC,A4(I)
HRRE AC,-3(J)
MOVEM AC,A3(I)
HLRE AC,-2(J)
MOVEM AC,A2(I)
HRRE AC,-2(J)
MOVEM AC,A1(I)
HLLZ AC,-1(J)
MOVEM AC,SC(I)
HRRE AC,-1(J)
MOVEM AC,A0(I)
MOVE MQ,TJ(I)
JRST ELL]
ELL: DIV MQ,TN(I)
TLNE DATWD,INT
CAIE I,5
JRST ELL1
MOVEI K,=11
HLRE TAC,MQ
FSC TAC,211
DECC: MOVE AC,DCI(K)
FMPR AC,TAC
FADR AC,PC(K)
MOVEM AC,CI(K)
SOJGE K,DECC
ELL1: MOVE AC,A4(I)
MUL AC,MQ
ADD AC,A3(I)
MUL AC,MQ
ADD AC,A2(I)
MUL AC,MQ
ADD AC,A1(I)
MUL AC,MQ
ADD AC,A0(I)
XOR AC,SC(I)
FSC AC,0
MOVEM AC,TFF(I)
CAIN I,5
JRST[ MOVE AC,TFF+5
FSBR AC,T0+5
MOVSI MQ,(180.0)
CAML AC,MQ
JRST[ INCT0: FSC MQ,1
FADRM MQ,T0+5
JRST .+1]
MOVN MQ,MQ
CAMG AC,MQ
JRST INCT0
JRST .+1]
NE: SOJGE I,EL
TRZ ALT
POPJ P,
DHO: AOJ I, ;DISASTER HAS OCCURED
LSH I,3 ;JOINT NUMBER
IORI I,EXER
MOVEM I,TRAJER
POP P,I
ZITO: SETZM ERRINT
MOVE AC,[XWD ERRINT,ERRINT+1]
BLT AC,ERRINT+5
TOFF: MOVE AC,STKPTR
MOVEM AC,ERRSTK
DATAO DEVT,[0]
MOVEI L,1000
TRNE RONLY
JRST READED
TRZ RUN+FINAL+DROP+INCREM+HCL+STP+WOB+HOMEF ;STOP THE ARM
SETZM TP
MOVE AC,[XWD TP,TP+1]
BLT AC,TP+5
PUSHJ P,SETSET
MOVNXT: AOS AC,STKPTR
MOVNX: SOJL L,[ LE:
MOVEI TAC,LOOPER
MOVEM TAC,TRAJER
JRST PW]
HLRE TAC,@STKPTR
CAIN TAC,3 ;IS IT A WAIT
JRST[ CAIL AC,BUF ;ALREADY IN A WAIT STATE
JRST PW
JRST MOVNXT]
CAIN TAC,SKPERR
JRST[ HRRZ TAC,(AC)
CAMN TAC,TRAJER
JRST[ AOS STKPTR
JRST NEXT]
JRST MOVNXT]
CAIN TAC,SKPNER
JRST[ HRRZ TAC,(AC)
CAME TAC,TRAJER
JRST[ AOS STKPTR
JRST MOVNXT]
JRST NEXT]
CAIN TAC,SKPSER
JRST[ LDB MQ,[POINT 3,(AC),35]
LDB TAC,[POINT 3,TRAJER,35]
CAIN TAC,(MQ)
JRST[ HRRZ TAC,(AC)
ANDI TAC,777770
TDNE TAC,TRAJER
JRST[ AOS STKPTR
JRST NEXT]
JRST MOVNXT]
JRST MOVNXT]
CAIN TAC,JMPREL
JRST[ HRRE TAC,(AC)
ADDI AC,(TAC)
HRRM AC,STKPTR
JRST MOVNX]
PW: CAIL AC,BUF
HRRM AC,JUMPBK
MOVEI AC,WAITIN
MOVEM AC,STKPTR
MOVEI AC,3
MOVEM AC,FUNCT
IFN TRACK,<SKIPN WALK>
IFE BLUE,<DATAO ARM,[2] ;STOP THE ARM>
IFN BLUE,<CONO ARM,0
SETZM MOTDAT
DATAO ARM,AC
MOVEI AC,1
MOVEM AC,MOTDAT+1
DATAO ARM,AC
>
IFN REPORT,<PUSH DATA,[0]>
READED: TRO DTST
IFN DEB,<
MOVEM 17,ACSAV+17
MOVEI 17,ACSAV
BLT 17,ACSAV+16
>
JRST SWDONE
NEXT: TRNE RUN
JRST[ SETZM FUNCT
JRST NXTJIF]
MOVEI L,1000
MOVE AC,FUNCT
CAIE AC,6 ;SET TOUCH
JRST[ MOVE TAC,SOTCHS
MOVEM TAC,SOTCH
TRZ STCH
JUMPE TAC,.+1
TRO STCH
JRST .+1]
IFN TRACK,<SKIPN WALK>
IFE BLUE,<
MOVEI DATWD,2
DATAO ARM,DATWD ;STOP THE ARM
>
IFN BLUE,<CONO ARM,0
SETZM MOTDAT
DATAO ARM,AC
MOVEI AC,1
MOVEM AC,MOTDAT+1
DATAO ARM,AC
>
INCPIC: AOS AC,STKPTR
PICKUP: SOJL L,LE
HLRE TAC,@STKPTR
CAIN TAC,JMPABS
JRST[JMPA:HRRZ TAC,@STKPTR
MOVEM TAC,STKPTR
HLRZ TAC,@STKPTR
CAIN TAC,3
JRST INCPIC
JRST PICKUP]
CAIN TAC,SKPERR
JRST[ HRRZ TAC,@STKPTR
CAMN TAC,TRAJER
AOS STKPTR
JRST INCPIC]
CAIN TAC,SKPNER
JRST[ HRRZ TAC,@STKPTR
CAME TAC,TRAJER
AOS STKPTR
JRST INCPIC]
CAIN TAC,SKPSER
JRST[ LDB MQ,[POINT 3,@STKPTR,35]
LDB TAC,[POINT 3,TRAJER,35]
CAIN TAC,(MQ)
JRST[ HRRZ TAC,@STKPTR
ANDI TAC,777770
TDNE TAC,TRAJER
AOS STKPTR
JRST INCPIC]
JRST INCPIC]
CAIN TAC,JMPREL
JRST[ HRRE TAC,@STKPTR
ADD TAC,STKPTR
HRRM TAC,STKPTR
JRST PICKUP]
SETZM TRAJER
MOVEI I,100
MOVEM I,COUNT
TRZE TAC,MERGE
TRO BOTH
MOVEM TAC,FUNCT
CAIN TAC,3 ;IS IT A WAIT
JRST[ MOVE TAC,STKPTR
CAIG TAC,BUF
JRST MODSTK
HRRM TAC,JUMPBK
HRRE TAC,@STKPTR
ADDI TAC,(CBUF)
SKIPE AC,(TAC)
JRST[ AOJ TAC,
MOVEI AC,STRING-1(AC)
HRLI TAC,(TAC)
HRRI TAC,STRING
BLT TAC,(AC)
JRST MODSTK]
MODSTK: MOVEI TAC,WAITIN
MOVEM TAC,STKPTR
IFN REPORT,<PUSH DATA,[0]>
TRO DTST
PUSHJ P,SWDONE]
MARK:
IFN REPORT,<
PUSH DATA,[<SIXBIT/NEXT/>+1]
MOVE TAC,FUNCT
HRL TAC,0
PUSH DATA,TAC
>
; JRST DISP
SWDONE: PUSHJ P,ACSAVE
IFE USER,<
IFN TRACK,<
SKIPE WALK
JRST @STRADR-1
>
CALLI 400024
>
IFN USER,<
JRST @STRADR-1
>
SETSET: MOVEI I,5
TCHK: MOVE J,TP(I)
JUMPE J,ATEND
SETZM TJ(I)
SETZM TN(I)
GNN: LDB J,[POINT 9,(J),17]
ADDI J,(CBUF)
MOVEM J,TP(I)
CAIN J,(CBUF)
JRST ATEND
JRST GNN
ATEND: SOJGE I,TCHK
PUSHJ P,EVAL
MOVEI I,5
FDTH: MOVE AC,TH(I)
MOVEM AC,THP(I)
MOVEM AC,T0(I)
MOVEM AC,T0P(I)
FSBR AC,TFF(I)
MOVEM AC,DTH(I)
SETZM DELTH(I)
SETZM TD(I)
SETZM TDP(I)
SETZM TDD(I)
SOJGE I,FDTH
SETZM NTICKS
TRZ WOB+INCREM+DROP+FINAL+RUN+ALT+HOMEF
POPJ P,
UPDC: MOVE TAC,[XWD NC,PC]
BLT TAC,PCC+5
HRL AC,AC
HRRI AC,NC
BLT AC,NC+6
MOVE DATWD,NC+6
TLNE DATWD,NXTFN
JRST[ AOS AC,STKPTR
HLRE AC,(AC)
MOVEM AC,FUNCT
JRST .+1]
HRRZM DATWD,FBI
MOVEI K,5
UPL: MOVE AC,NC(K)
HLLZM AC,NC(K)
HRLZM AC,NCC(K)
MOVE AC,MOTARM(K)
FADRB AC,NCC(K)
TLNN DATWD,INT
JRST UPL1
FSBR AC,PCC(K)
MOVEM AC,DCII(K)
MOVE AC,NC(K)
FSBR AC,PC(K)
MOVEM AC,DCI(K)
UPL1: TDNE DATWD,BMASK(K)
IFE BLUE,<TDO DATWD,BMASK(K)>
IFN BLUE,<PUSHJ P,MOTSTA>
SOJGE K,UPL
TLNE DATWD,INT
POPJ P,
MOVE AC,[XWD NC,CI]
BLT AC,CII+5
POPJ P,
ACSAVE: MOVEM BITSAV
MOVEM CBUF,CBUFS
MOVEM DATWD,DATWDS
IFN REPORT+TRACK,<MOVEM DATA,DATPT>
POPJ P,
ACREST: MOVE BITSAV
MOVE CBUF,CBUFS
MOVE DATWD,DATWDS
IFN REPORT+TRACK,<MOVE DATA,DATPT>
POPJ P,
MOTDRV: MOVE MQ,-1(P) ;≤-100 DRIVE IN AC ≤77, JOINT IN I
CAIL MQ,77
JRST[ MOVEI MQ,77
JRST DPIT]
MOVN MQ,MQ
CAILE MQ,100
JRST[ MOVEI MQ,100
JRST DPNIT]
DPNIT: MOVN MQ,MQ
DPIT: DPB MQ,MOTPTR(I)
DATAO ARM,@MOTPTR(I)
SUB P,[XWD 2,2]
JRST @2(P)
MOTPTR: POINT 7,MOTDAT,6
POINT 7,MOTDAT,13
POINT 7,MOTDAT,20
POINT 7,MOTDAT,27
POINT 7,MOTDAT,34
POINT 7,MOTDAT+1,6
POINT 7,MOTDAT+1,13
POINT 7,MOTDAT+1,20
MOTDAT: 0
1
MOTBRK: 0
MOTSTP: MOVE MQ,MOTBRK
TDZ MQ,BBIT(I)
CONO ARM,(MQ)
MOVEM MQ,MOTBRK
MOVEI MQ,0
DPB MQ,MOTPTR(I)
DATAO ARM,@MOTPTR(I)
POPJ P,
MOTSTA: MOVE MQ,MOTBRK
TDO MQ,BBIT(I)
CONO ARM,1(MQ)
MOVEM MQ,MOTBRK
POPJ P,
BBIT: 400000
200000
100000
40000
20000
10000
4000
2000
PREAD:
IFN TRACK,<
SKIPE WALK
JRST[GNPR:AOBJP DATA,[ MOVE AC,[IOWD DBL,DATO]
MOVEM AC,DATPT
MOVE DATA,DATPT
SETZ TAC,
INPUT 15,1
JRST GNPR]
MOVE DACVAL,(DATA)
JRST @READFN]
>
MOVEI TAC,10
MOVEM TAC,DATMSD
DACRED: SOSGE DATMSD
JRST[REDER: MOVEI TAC,READER
MOVEM TAC,TRAJER
JRST TOFF]
DACST: CONO DB,4250
CONO AD,(K)
NREAD: MOVEI TAC,30
CONSO DB,1000
SOJGE TAC,.-1
JUMPL TAC,[DACDIE:CONO AD,4000(K) ;STOP DAC
TRO REREAD
IFN DEB,<MOVEM DACVAL,DACERR>
MOVEI TAC,12
WRH: SOJGE TAC,WRH
JRST DACRED]
DATAI DB,DACVAL
CONSZ DB,10000
JRST DACDIE
XOR DACVAL,SBMSK
IFN TRACK,<PUSH DATA,DACVAL>
JRST @READFN
FREAD: ADDI K,770000
IFN TRACK,<SKIPN WALK>
CONO AD,4000(K) ;STOP AD ON NEXT CHANNEL
POPJ P,
READFN: FREAD
XLIST
SUBTTL CONSTANTS LOU PAUL
LIST
;DATA
TRANS: BLOCK 14
THSOLN: BLOCK 6
HDP: 0
HOMEC: 0
THM: BLOCK 6
THF: BLOCK 6
TIMM: 0
TIMF: 0
NON: POINT 12,INNER(AC),11
POINT 12,INNER(AC),23
POINT 12,INNER(AC),35
POINT 12,OUTER(AC),11
POINT 12,OUTER(AC),23
POINT 12,OUTER(AC),35
ERR: 0.05
0.05
0.01
0.1
0.1
0.7
IFN SIMU,<
TH-1
ARM.TH: .+4
>
TH:
IFE BLUE,<-180.0> IFN BLUE,<180.0> ;THE NEXT 7 LOCATIONS ARE BLOCK TRANSFERED.
-90.0
12.0
-90.0
90.0
0.0
IFN SIMU,<ARM.GR:>
HAND: 3.0
TDD: BLOCK 6
ERRINT: 0
0
0
0
0
0
DTH: BLOCK 6
TD: BLOCK 6
T0P: BLOCK 6
TDP: BLOCK 6
ET0: BLOCK 6
T0:
IFE BLUE,<-180.0> IFN BLUE,<180.0>
-90.0
14.0
-90.0
90.0
0.0000
TFF:
IFE BLUE,<-180.0> IFN BLUE,<180.0>
-90.0
14.0
-90.0
90.0
0.0000
DELTH: BLOCK 6 ;THIS AND THE NEXT ARE BLT ED TOGETHER
RESTT: BLOCK 14 ;THE CUMULATIVE RESTORE MATRIX
RESTF: 0 ;TRUE IF A RESTORE HAS HAPPENED
DDTH: 0
0
0
0
0
0
NTICKS: 0
DNAME: BLOCK NSCEL
DTRANS: BLOCK NSCEL*14
TORE: BLOCK 6
T: BLOCK 6
IFN REPORT,<
PBLK: <SIXBIT/THETA/>+6
JER: BLOCK 6
<SIXBIT/VEL/>+6
VER: BLOCK 6
<SIXBIT/DAC/>+6
>
IFN USER+REPORT+TRACK+DEB,<MOTOR: BLOCK 6>
FBI: 252502
VZ: BLOCK 6
IFN TACH,<
VDTH: BLOCK 6
>
THP: BLOCK 6
STQ: BLOCK 6
SDTQ: 0
ASTP: 0
ASTPP: 0
PC: BLOCK 6
PCC: BLOCK 6
DCI: BLOCK 6
DCII: BLOCK 6
CI: 0
0
0
0
0
0
CII:
IFE BLUE,<
1000.0
1200.0
100.0
100.0
100.0
100.0
>
IFN BLUE,<
1000.0
1200.0
100.0
100.0
100.0
100.0
>
NC: 0
0
0
0
0
0
NCC:
IFE BLUE,<
1000.0
1200.0
100.0
100.0
100.0
100.0
>
IFN BLUE,<
1000.0
1200.0
100.0
100.0
100.0
100.0
>
IFN DEB,<DACERR: 0>
REFTR: 0
ETIME: =16667
TDF: 1.0
IFN DEB,<
ETIM: 0
ACSAV: BLOCK 20
>
PDL: DHO
BLOCK PDLL
LTIME: 0
IFN SIMU,<ARM.FU:>
FUNCT: 0
ROT6: 0
TRAJER: 0
DOING: 0
DATMSD: 0
CBUFS: 0
DATWDS: 0
SNUM: POINT 12,DACVAL,23
SBMSK: 400040004000
REV:
IFE BLUE,<
0
0
-1
0
-1
-1
>
IFN BLUE,<
0
0
0
0
0
0
>
DMASK: 400000
100000
20000
4000
1000
200
BMASK: XWD 400000,200000
XWD 200000, 40000
XWD 100000, 10000
XWD 40000, 2000
XWD 20000, 400
XWD 10000, 100
GMASK: 200000
40000
10000
2000
400
100
VCHAN:
IFE BLUE,<
52B23
53B23
54B23
0
0
0
>
IFE BLUE,<
41B23
42B23
43B23
44B23
45B23
0
>
CHAN: 55B23
56B23
57B23
60B23
61B23
THIRD: 0.3
SIXTH: 0.1
BLOCK =20
0
WAITIN: XWD 3,0
JUMPBK: XWD JMPABS,WAITIN
STKPTR: WAITIN
ERRSTK: 0
BITSAV: 0
COUNT: 0
STWT: 0
HCNT: 0
TP: 0
0
0
0
0
0
TJ: BLOCK 6
LOOP: BLOCK 10
TN: BLOCK 6
SC: BLOCK 6
A0: BLOCK 6
A1: BLOCK 6
A2: BLOCK 6
A3: BLOCK 6
A4: BLOCK 6
BLOCKS: 0
NXTBUF: 0
BUF: 0
BLOCK 1000
BUF2: 0
BLOCK 1000
IFN ADJUST<
ADJI: -1
ADJV: 0
ADJE: 0
ADJIF: 0
FACTOR: BLOCK 3
>
IFN REPORT+TRACK,<
DATIWD: 0
0
DATPT: 0
DATO: BLOCK DBL+100
>
IFN DYNAMICS,<
DDAT: <SIXBIT/FORD/>+6
FOR: BLOCK 6
<SIXBIT/BACK/>+6
BAK: BLOCK 6
>
;DYNAMICS
IFN ADJUST,<
INL: MOVE I,ADJI
MOVE TAC,KV(I)
MOVEM TAC,ADJV
MOVE TAC,KE(I)
MOVEM TAC,ADJE
MOVE TAC,KI(I)
MOVEM TAC,ADJIF
JRST WAIT
>
IFE BLUE,<
PK: 0; 0.00033
0; 0.00063
0; -0.026
0; -0.0009
0; 0.0
0; 0.06666
F0: 800.0
320.0
76.0
80.0
230.0
120.0
V0: 0.9
0.3
3.4
3.5
3.0
3.0
KM: 0.00187
0.00191
0.0822
0.02543
0.035
0.06667
EMF: 4.35
4.40
33.0
1.22
1.22
2.92
MOTARM: 400.0
750.0
50.0
200.0
200.0
50.0
KV: 400.0
300.0
70.0
100.0
100.0
100.0
KE: 60000.0
150000.0
1500.0
8000.0
8000.0
1200.0
KI: 1200000.0
3800000.0
13000.0
140000.0
240000.0
5000.0
VSCALE: -13.3
-10.8
-1.02
>
IFN BLUE,<
PK: 0.537
0.680
0.498
10.614
11.890
79.752
F0: 0.85
0.96
1.20
0.253
0.161
0.216
V0: 2.0
3.0
7.0
12.0
6.0
12.0
KM: 6.247
4.755
7.44
74.225
102.5
164.1
MOTARM: 400.0
750.0
50.0
200.0
200.0
50.0
KV: 400.0
300.0
70.0
100.0
100.0
100.0
KE: 60000.0
150000.0
1500.0
8000.0
8000.0
1200.0
KI: 1200000.0
3800000.0
13000.0
140000.0
240000.0
5000.0
VSCALE: -13.3
-10.8
-1.02
>
XLIST
SUBTTL ARM CALIBRATION LOU PAUL
LIST
;NON LINEAR CALIBRATION
RADIX = 10
IFE BLUE,<
INNER: BYTE (12) 995, 979,1020
BYTE (12) 995, 979,1016
BYTE (12) 995, 979,1013
BYTE (12) 995, 982,1010
BYTE (12) 995, 994, 989
BYTE (12) 991,1006, 999
BYTE (12) 989,1021,1001
BYTE (12) 1007,1031,1011
BYTE (12) 1007,1008, 996
BYTE (12) 1010, 983, 973
BYTE (12) 1007, 972, 970
BYTE (12) 1001, 972, 975
BYTE (12) 995, 983, 941
BYTE (12) 988,1008, 944
BYTE (12) 986,1017, 989
BYTE (12) 986,1017,1047
BYTE (12) 986,1017,1073
OUTER: BYTE (12) 1025,1061,1098
BYTE (12) 1019,1061,1098
BYTE (12) 1005,1061,1059
BYTE (12) 979,1061,1014
BYTE (12) 989,1047, 999
BYTE (12) 996,1014, 980
BYTE (12) 1007, 991, 962
BYTE (12) 1013, 973, 947
BYTE (12) 1004, 966, 948
BYTE (12) 997, 959, 955
BYTE (12) 997, 948, 961
BYTE (12) 997, 951, 969
BYTE (12) 997,1006, 988
BYTE (12) 997,1066, 995
BYTE (12) 997,1097,1015
BYTE (12) 997,1097,1063
BYTE (12) 997,1097,1087
RADIX =8
SCALE: 1.233472
0.847226
0.092519
1.341662
-1.120682
-1.408665
OFF: -299.690800
-240.15
2.677699
-234.6
192.2
258.0
OFF6: -183.10
>
IFN BLUE,<
INNER: BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
OUTER: BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
BYTE (12) 1000,1000,1000
RADIX =8
SCALE: 1.0
1.0
1.0
1.0
1.0
1.0
OFF: 0.0
0.0
0.0
0.0
0.0
0.0
OFF6: -180.0
>
XLIST
SUBTTL HAND FUNCTIONS LOU PAUL
LIST
HOPEN: ;OPENS THE HAND TO SET POINT
TRNN HCL
JRST[ MOVEI TAC,=200 ;GO HERE FIRST TIME
MOVEM TAC,HCNT ;MAX TIME TO SERVO THERE
ADDI TAC,=60
MOVEM TAC,COUNT
HRLZ AC,@STKPTR ;REQUIRED OPENING
MOVE MQ,[3.6]
CAML AC,MQ
MOVE AC,MQ ;NOT GREATER THAN 2.5
MOVEM AC,RSET ;REQUIRED FINAL SET POINT
IFE USER,< PUSHJ P,HEAD ;READS THE HAND>
MOVE AC,HAND ;AND STORE IT HERE
MOVEM AC,SET ;DYNAMIC SET POINT
TRZ STCH ;TURN OFF TOUCH AND SAVE STATE
MOVE TAC,[0.2]
CAML AC,RSET
MOVN TAC,TAC
MOVEM TAC,DIR ;CHANGE OF SET POINT PER JIFFY
TRO HCL ;SO THAT WE DON'T COME BACK HERE
JUMPGE TAC,NXTJIF
FSC TAC,-1 ;IF CLOSING GO SLOWER
MOVEM TAC,DIR
SKIPE SOTCH ;AND RESTORE TOUCH
TRO STCH
JRST NXTJIF]
HSU: PUSHJ P, HEAD ;INCREMENTS SETPOINT AND SETS D/A
;LEAVES ARM DATAO IN TAC
IFE HANDWORK <
JRST NEXT
>
SOSGE HCNT
JRST[ MOVEI AC,HTERR
MOVEM AC,TRAJER
POP P,AC
JRST TOFF]
SKIPE DIR
JRST DAW ;IF NOT AT FINAL SET DRIVE ANYWAY
MOVE AC,RSET
FSBR AC,HAND ;CHECK ERROR TOLERANCE
MOVM AC,AC
FSBR AC,[0.05]
JUMPLE AC,[ TRZ HCL
TDZ DATWD,HANDAT
IFN BLUE,< MOVEI I,6
PUSHJ P,MOTSTP
>
JRST NEXT]
DAW:
IFN TRACK,<SKIPN WALK>
IFE BLUE,<DATAO ARM,DATWD ;DRIVE HAND>
JRST NXTJIF
HCLOSE:
TRNN HCL ;ONLY ONCE
JRST[ TRZ STCH ;TURN OFF TOUCH AND SAVE STATE
MOVEI TAC,=240
MOVEM TAC,COUNT
HRLZ AC,@STKPTR ;MINIMUN OPENING
MOVEM AC,MINDST
IFE USER,< PUSHJ P,HEAD ;READ HAND>
MOVE AC,HAND
MOVEM AC,SET
MOVE TAC,[-0.10]
MOVEM TAC,DIR ;CHANGE OF SET POINT PER JIFFY
MOVSI AC,(4.0)
MOVNM AC,RSET ;FINAL SET POINT -1 SO AS TO SQUEEZE
TRO HCL
JRST NXTJIF]
BB: PUSHJ P,HEAD
IFE HANDWORK <
JRST ER2
>
IFN TRACK,<SKIPN WALK>
IFE BLUE,<DATAO ARM,DATWD ;DRIVE HAND>
MOVE AC,HERR
CAMG AC,[1.00]
JRST NXTJIF ;IF ERROR LESS THAN 1 KEEP ON
ER2: TRZ HCL
TDZ DATWD,HANDAT
SKIPE SOTCH ;RESTORE TOUCH
TRO STCH
MOVE AC,MINDST
CAMG AC,HAND
JRST NEXT
MOVEI 1,GRASER ;IF LESS THAN MINOPENING GIVE ERROR
MOVEM 1,TRAJER
POP P,1
JRST TOFF
HEAD: MOVEI K,HANDCHA
IFE USER,<
PUSHJ P,PREAD ;READ HAND CHANNEL
LDB AC,SNUM
ANDI DACVAL,7777
ADDI AC,(DACVAL) ;ADD ALL THREE READINGS TOGETHER
FSC AC,220
FMPR AC,HSCALE
FADR AC,HOFF
MOVEM AC,HAND ;OPENING IN INCHES
>
IFN USER,<
MOVE AC,FUNCT
CAIN AC,1
JRST[ SKIPN DIR
JRST[ MOVE AC,RSET
JRST SFH]
MOVE AC,HAND
FADR AC,DIR
JRST SFH]
MOVE AC,HAND
FADR AC,DIR
CAMG AC,MINDST
MOVE AC,MINDST
SFH: MOVEM AC,HAND
>
IFN REPORT,<
PUSH DATA,[<SIXBIT/HAND/>+1]
PUSH DATA,HAND
>
SKIPN TAC,DIR
JRST[ MOVE TAC,SET
JRST GOTHER]
FMPR TAC,TDF
FADRB TAC,SET ;INCREMENT SET POINT
FSBR TAC,RSET ;NEGATIVE REMAINS TO GO
FMPR TAC,DIR
JUMPGE TAC,[ MOVE TAC,RSET ;GOT THERE
MOVEM TAC,SET
SETZM DIR
JRST GOTHER]
MOVE TAC,SET
GOTHER: FSBR AC,TAC ;HAND SERVO
EXCH AC,HERR
FSBR AC,HERR
FMPR AC,KVH
MOVN TAC,HERR
FMPR TAC,KEH
FADR AC,TAC
IFE BLUE,<
TDO DATWD,HANDAT
JUMPGE AC,.+2
TRZ DATWD,40
MOVM AC,AC
FIX AC,211000
CAILE AC,776000
MOVEI AC,776000
TRC AC,400000
HRLI AC,6
IFN DEB<
MOVEM AC,HANDAW
>
IFN TRACK,<SKIPN WALK>
DATAO WIDTH,AC
>
POPJ P,
HANDAT:XWD 4000,60
HSCALE: 1.32
HOFF: -0.81
DIR: 0 ;CHANGE OF SETPOINT PER JIFFY
SET: 0 ;DYNAMIC SET POINT
RSET: 0 ;FINAL SET POINT
MINDST: 0 ;MIN OPENING FOR CLOSE
HERR: 0 ;HAND POSITION ERROR
KEH: 5.0 ;ERROR GAIN
KVH: 10.0 ;VELOCITY GAIN
IFN DEB<
HANDAW: 0
>
PLACE: ;PLACE HAND ON TABLE
TRNN DROP ;ONLY COME HERE ONCE
JRST[ TRO DROP+RUN
MOVEI 1,=360
MOVEM 1,COUNT
HRRE 1,@STKPTR
ADDI 1,(CBUF)
HRLI 1,(1)
HRRI 1,DELTH
BLT 1,DELTH+5 ;CHANGE OF THETA PER JIFFY
MOVEI 1,=12
MOVEM 1,HCNT ;DON'T STOP FOR THE FIRST 12 JIFFIES
MOVE DATWD,[770000252502]
HRRZM DATWD,FBI
JRST NXTJIF]
SOSL HCNT
JRST NXTJIF
IFN USER,<JRST PLACED>
EXL: MOVM AC,ET0+1
CAML AC,PLER
JRST PLACED
JRST NXTJIF
PLACED: SETZM FUNCT
JRST RUDONE
PLER: 0.6
NUDGE: PUSHJ P,ACSAVE
PUSH P,[TRANS]
PUSH P,[TH]
PUSHJ P,UPDATE
PUSH P,[TRANS]
PUSH P,[TRANS]
HRRE TAC,@STKPTR
ADD TAC,CBUFS
PUSH P,TAC
PUSHJ P,TIMES
PUSH P,[TRANS]
MOVE AC,[XWD TH,THSOLN]
BLT AC,THSOLN+5
PUSH P,[THSOLN]
PUSHJ P,SOLVE
PUSHJ P,ACREST
JUMPE 1,[ MOVEI AC,SOLERR
MOVEM AC,TRAJER
JRST TOFF]
MOVEI I,5
NUL1: MOVE AC,THSOLN(I)
FSBR AC,TH(I)
MOVEM AC,DELTH(I)
SOJGE I,NUL1
HRRE 1,@STKPTR
ADDI 1,14(CBUF)
PUSHJ P,UPDC
HRRE 1,@STKPTR
ADDI 1,14(CBUF)
MOVE 1,7(1)
ASH 1,16
SKIPN 1
JRST[ PUSH P,[DELTH]
PUSHJ P,SLOTIM
JRST .+1]
MOVEM 1,NTICKS
ASH 1,-15
ADDI 1,=60
MOVEM 1,COUNT
TRO INCREM+RUN
SETZM TICKS
TRZE BOTH
JRST[ AOS AC,STKPTR
HLRE AC,(AC)
MOVEM AC,FUNCT
JRST .+2]
SETZM FUNCT
JRST NXTJIF
DRIVE: HRRE TAC,@STKPTR
ADDI TAC,(CBUF)
HRLI TAC,(TAC)
HRRI TAC,DELTH
BLT TAC,DELTH+5
HRRE 1,@STKPTR
ADDI 1,6(CBUF)
PUSHJ P,UPDC
HRRE 1,@STKPTR
ADDI 1,6(CBUF)
MOVE 1,7(1)
ASH 1,16
SKIPN 1
JRST[ PUSH P,[DELTH]
PUSHJ P,SLOTIM
JRST .+1]
MOVEM 1,NTICKS
ASH 1,-15
ADDI 1,=60
MOVEM 1,COUNT
TRO INCREM+RUN
SETZM TICKS
TRZE BOTH
JRST[ AOS AC,STKPTR
HLRE AC,(AC)
MOVEM AC,FUNCT
JRST .+2]
SETZM FUNCT
JRST NXTJIF
STOP: HRRE 1,@STKPTR
ADDI 1,(CBUF)
HRLI 1,(1)
HRRI 1,STQ
BLT 1,STQ+5
MOVEI I,5
SETZ AC,
DSTQ: MOVE TAC,STQ(I)
FDVR TAC,F0(I)
MOVM MQ,TAC
CAMGE MQ,[0.3]
SETZB TAC,STQ(I)
MOVEM TAC,STQ(I)
FMPR TAC,TAC
FADR AC,TAC
SOJGE I,DSTQ
MOVEM AC,SDTQ
SETZM ASTPP
TRO STP
JRST NEXT
TOOL: TRNN HCL
JRST[ HRRE TAC,@STKPTR
CAIL TAC,77
MOVEI TAC,77
MOVN TAC,TAC
CAILE TAC,100
MOVEI TAC,100
MOVN TAC,TAC
DPB TAC,[POINT 7,TDAT,20]
TRO HCL
CONO DEVT,1
JRST .+1]
SKIPG COUNT
JRST[ SETZ AC,
DPB AC,[POINT 7,TDAT,20]
DATAO DEVT,TDAT
TRZ HCL
JRST NEXT]
DATAO DEVT,TDAT
JRST NXTJIF
TDAT: 1
PATH: TRO RUN
AOS DOING ;INCREASE TRAJECTORY NUMBER
MOVEI AC,=1800
MOVEM AC,COUNT
SETZM LOOP
MOVE TAC,[XWD LOOP,LOOP+1]
BLT TAC,LOOP+9
MOVEI I,5
HRRE K,@STKPTR
ADDI K,34
SUL: SUBI K,4
HRLZM K,TJ(I)
HRLZM K,TN(I)
MOVEI TAC,TJ(I)
MOVEM TAC,TP(I)
SOJGE I,SUL
SETZM ETIME
PUSHJ P,EVAL
TRZ INCREM
HRRE TAC,@STKPTR
ADDI TAC,(CBUF)
HRRZ AC,(TAC)
ASH AC,16
MOVEM AC,NTICKS ;RUN TIME
SETZM TICKS
MOVEI I,5
MOVBK: MOVE AC,TH(I)
MOVEM AC,T0(I)
FSBR AC,TFF(I)
CAIN I,5
JRST[ MOVSI MQ,(180.0)
CAML AC,MQ
JRST[SETROT:FSC MQ,1
MOVN MQ,MQ
FADRM MQ,TH+5
FADRM MQ,ROT6
JRST MOVBK]
MOVN MQ,MQ
CAMG AC,MQ
JRST SETROT
JRST ADDTF]
ADDTF: MOVEM AC,DTH(I)
MOVN AC,AC
SKIPE RESTF
FADR AC,DDTH(I)
MOVEM AC,DELTH(I)
SETZM TD(I)
SOJGE I,MOVBK
SKIPE RESTF
JRST[ MOVE AC,[XWD RESTF,DDTH]
SETZM RESTF
BLT AC,DDTH+5
JRST .+1]
SETZM TICKS
TRZE BOTH
JRST[ AOS AC,STKPTR
HLRE AC,(AC)
MOVEM AC,FUNCT
JRST .+2]
SETZM FUNCT
JRST NXTJIF
ASSIGN: HRRE K,@STKPTR
ADDI K,(CBUF)
MOVE TAC,(K)
MOVEI I,NLCEL-1
ASS1: MOVE AC,LNAME(I)
CAME AC,TAC
SOJGE I,ASS1
JUMPGE I,FONEL
MOVEI I,NLCEL-1
ASS2: SKIPE LNAME(I)
SOJGE I,ASS2
JUMPL I,[MOVEI TAC,SOJERR
MOVEM TAC,TRAJER
JRST TOFF]
MOVEM TAC,LNAME(I)
FONEL: AOJ K,
MOVE AC,(K)
MOVEM AC,LCOUNT(I)
JRST NEXT
LCOUNT: BLOCK NLCEL
LNAME: BLOCK NLCEL
SAVE: HRRE K,@STKPTR
ADDI K,(CBUF)
MOVE TAC,(K)
MOVEI I,NSCEL-1
SAV1: MOVE AC,DNAME(I)
CAME AC,TAC
SOJGE I,SAV1
JUMPGE I,FONE
MOVEI I,NSCEL-1
SAV2: SKIPE DNAME(I)
SOJGE I,SAV2
JUMPL I,[MOVEI TAC,SAVERR
MOVEM TAC,TRAJER
JRST TOFF]
MOVEM TAC,DNAME(I)
FONE: IMULI I,=12
ADDI I,DTRANS
PUSH P,I
PUSHJ P,ACSAVE
PUSH P,[TRANS]
PUSH P,[TH]
PUSHJ P,UPDATE
PUSH P,[TRANS]
PUSH P,[TRANS]
HRRE K,@STKPTR
ADD K,CBUFS
AOJ K,
PUSH P,K
PUSHJ P,TIMES
PUSHJ P,ACREST
POP P,TAC
MOVEI AC,13(TAC)
HRLI TAC,TRANS
BLT TAC,(AC)
JRST NEXT
RESTORE:HRRE K,@STKPTR
ADDI K,(CBUF)
MOVE TAC,(K)
MOVEI I,NSCEL-1
RES1: MOVE AC,DNAME(I)
CAME AC,TAC
SOJGE I,RES1
JUMPL I,[MOVEI TAC,SAVERR
MOVEM TAC,TRAJER
JRST TOFF]
SKIPE 1(K)
SETZM DNAME(I)
PUSHJ P,ACSAVE
IMULI I,=12
ADDI I,DTRANS
ADDI K,2
PUSH P,[TRANS]
PUSH P,[RESTT]
PUSH P,K
SKIPE RESTF
JRST[ PUSH P,[RESTT]
PUSH P,I
PUSH P,[RESTT]
PUSHJ P,TIMES
JRST RES7]
SETOM RESTF
HRL AC,I
HRRI AC,RESTT
BLT AC,RESTT+13
RES7: PUSHJ P,TIMES
PUSH P,[TRANS]
HRRE K,@STKPTR
ADD K,CBUFS
HRLI AC,16(K)
HRRI AC,THSOLN
BLT AC,THSOLN+5
PUSH P,[THSOLN]
PUSHJ P,SOLVE
PUSHJ P,ACREST
JUMPE 1,[MOVEI AC,SOLERR
MOVEM AC,TRAJER
JRST TOFF]
MOVEI I,5
HRRE K,@STKPTR
ADDI K,23(CBUF)
RES2: MOVE AC,THSOLN(I)
FSBR AC,(K)
MOVEM AC,DDTH(I)
SOJ K,
SOJGE I,RES2
JRST NEXT
TIMFAC: 0.5
0.5
4.5
0.2
0.2
0.4
SET.ARM:HRRE K,@STKPTR
ADDI K,(CBUF)
MOVE TAC,(K)
MOVEI I,NSCEL-1
SET1: MOVE AC,DNAME(I)
CAME AC,TAC
SOJGE I,SET1
JUMPGE I,FSET
MOVEI I,NSCEL-1
SET2: SKIPE DNAME(I)
SOJGE I,SET2
JUMPL I,[MOVEI TAC,SAVERR
MOVEM TAC,TRAJER
JRST TOFF]
MOVEM TAC,DNAME(I)
FSET: IMULI I,=12
ADDI I,DTRANS
MOVEI AC,13(I)
HRLI I,1(K)
BLT I,(AC)
JRST NEXT
CENTER: TRNN HCL
JRST[ TRO HCL
PUSHJ P,ACSAVE
PUSH P,[TRANS]
PUSH P,[TH]
PUSHJ P,UPDATE
MOVE AC,TRANS+1
FADRM AC,TRANS+3
MOVE AC,TRANS+5
FADRM AC,TRANS+7
MOVE AC,TRANS+11
FADRM AC,TRANS+13
PUSH P,[TRANS]
MOVE AC,[XWD TH,DELTH]
BLT AC,DELTH+5
PUSH P,[DELTH]
PUSHJ P,SOLVE
JUMPE 1,[ MOVEI AC,SOLERR
MOVEM AC,TRAJER
JRST TOFF]
PUSHJ P,ACREST
MOVEI I,5
CE1: MOVE AC,DELTH(I)
FSBR AC,TH(I)
FMPR AC,[0.005]
MOVEM AC,DELTH(I)
SOJGE I,CE1
MOVEI TAC,=600
MOVEM TAC,COUNT
HRLZ AC,@STKPTR ;MINIMUN OPENING
MOVEM AC,MINDST
MOVSI AC,(4.0)
MOVNM AC,RSET
IFE USER,< PUSHJ P,HEAD>
MOVE AC,HAND
MOVEM AC,SET
TRZ STCH
MOVE TAC,[-0.02]
MOVEM TAC,DIR
JRST NXTJIF]
PUSHJ P,HEAD
IFE HANDWORK,<JRST ER2>
DATAO ARM,DATWD
TRNN DROP
JRST[ MOVEI I,1
CFT: MOVE AC,OBS(I)
JUMPG AC,[SETZM TOT
SKIPN I
AOS TOT
TRO DROP+RUN
MOVE TAC,[-0.01]
MOVEM TAC,DIR
SKIPN TOT
JRST[ MOVEI I,5
OT: MOVE AC,DELTH(I)
MOVNM AC,DELTH(I)
SOJGE I,OT
JRST C2]
C2: MOVE TAC,[XWD 770000, 252500]
HRRZM TAC,FBI
IOR DATWD,TAC
MOVSI AC,(1.0)
MOVEM AC,TDF
MOVEI I,4
GETGO: PUSHJ P,NXTH
SOJGE I,GETGO
JRST NXTJIF]
SOJGE I,CFT
JRST NXTJIF]
MOVE TAC,TOT
SKIPG OBS(TAC)
JRST NXTJIF
TRZ DROP+RUN+FINAL
PUSHJ P,SETSET
TDZ DATWD,[XWD 770000,252500]
MOVE TAC,DIR
FSC TAC,3
MOVEM TAC,DIR
MOVEI TAC,2
MOVEM TAC,FUNCT
JRST NXTJIF]
TOT: 0
WOBBLE: HRLZ AC,@STKPTR
MOVEM AC,WOBMAG
MOVEI AC,1
MOVEM AC,WOBCNT+2
MOVEM AC,WOBCNT+1
MOVEI AC,6
MOVEM AC,WOBCNT
MOVN AC,WOBMAG
FADRM AC,DTH+3
TRO WOB
JRST NEXT
WOBMAG: 0
WOBCNT: BLOCK 3
SIN: 0.0
0.30902
0.58779
0.80902
0.95106
1.0
0.95106
0.80902
0.58779
0.30902
0.0
-0.30902
-0.58779
-0.80902
-0.95106
-1.0
-0.95106
-0.80902
-0.58779
-0.30902
SEARCH: SETZM XSEL
SETZM SCOUNT
SETZM TCOUNT
HRRE 1,@STKPTR
ADDI 1,(CBUF)
HRLI 1,(1)
HRRI 1,XDEL
BLT 1,AOJJ+5
SETZM SDTH
MOVE AC,[XWD SDTH,SDTH+1]
BLT AC,SDTH+2
JRST NEXT
AOJI: MOVEI I,2
MOVE K,SCOUNT
SOSG J,TCOUNT
JRST[ SKIPN XSEL
AOS K,SCOUNT
SETCMM XSEL
MOVEI J,(K)
MOVEM J,TCOUNT
JRST .+1]
SKIPE XSEL
JRST[IX:MOVE AC,XDEL(I)
TRNN K,1
MOVN AC,AC
FADRB AC,SDTH(I)
SOJGE I,IX
JRST NJ]
IY: MOVE AC,YDEL(I)
TRNN K,1
MOVN AC,AC
FADRB AC,SDTH(I)
SOJGE I,IY
NJ: MOVE AC,SDTH
MOVEM AC,AOJT+3
MOVE AC,SDTH+1
MOVEM AC,AOJT+7
MOVE AC,SDTH+2
MOVEM AC,AOJT+13
PUSHJ P,ACSAVE
PUSH P,[TRANS]
PUSH P,[RESTT]
PUSH P,[AOJZ]
SKIPE RESTF
JRST[ PUSH P,[RESTT]
PUSH P,[AOJT]
PUSH P,[RESTT]
PUSHJ P,TIMES
JRST SE7]
SETOM RESTF
MOVE AC,[XWD AOJT,RESTT]
BLT AC,RESTT+13
SE7: PUSHJ P,TIMES
PUSH P,[TRANS]
MOVE AC,[XWD AOJJ,THSOLN]
BLT AC,THSOLN+5
PUSH P,[THSOLN]
PUSHJ P,SOLVE
PUSHJ P,ACREST
JUMPE 1,[MOVEI AC,SOLERR
MOVEM AC,TRAJER
JRST TOFF]
MOVEI I,5
SE2: MOVE AC,THSOLN(I)
FSBR AC,AOJJ(I)
MOVEM AC,DDTH(I)
SOJGE I,SE2
HRRE TAC,@STKPTR
ADD TAC,STKPTR
SOJ TAC,
HRRM TAC,STKPTR
JRST NEXT
TCOUNT: 0
SCOUNT: 0
XSEL: 0
XDEL: BLOCK 3
YDEL: BLOCK 3
AOJZ: BLOCK 14
AOJJ: BLOCK 6
AOJT: 1.0
0
0
0
0
1.0
0
0
0
0
1.0
0
SDTH: BLOCK 3
SOJGI: HRRE K,@STKPTR
ADDI K,(CBUF)
MOVE TAC,(K)
MOVEI I,NLCEL-1
SOJ1: MOVE AC,LNAME(I)
CAME AC,TAC
SOJGE I,SOJ1
JUMPL I,[MOVEI TAC,SOJERR
MOVEM TAC,TRAJER
JRST TOFF]
SOSG LCOUNT(I)
JRST NEXT
AOJ K,
HRRE TAC,(K)
ADD TAC,STKPTR
SOJ TAC,
HRRM TAC,STKPTR
JRST NEXT
MOVING: HRRE K,@STKPTR
ADDI K,(CBUF)
MOVE TAC,(K)
MOVEI I,NSCEL-1
MOV1: MOVE AC,DNAME(I)
CAME AC,TAC
SOJGE I,MOV1
JUMPGE I,FMOV
MOVEI I,NSCEL-1
MOV2: SKIPE DNAME(I)
SOJGE I,MOV2
JUMPL I,[MOVEI TAC,SAVERR
MOVEM TAC,TRAJER
JRST TOFF]
MOVEM TAC,DNAME(I)
FMOV: IMULI I,=12
ADDI I,DTRANS
MOVEM I,MOVT
MOVEI AC,13(I)
HRLI I,MOVIT
BLT I,(AC)
SETZM MOVTIM
AOJ K,
HRLI TAC,(K)
HRRI TAC,MOVV
BLT TAC,MOVV+2
JRST NEXT
MOVTIM: 0
MOVT: 0
MOVV: BLOCK 3
MOVIT: 1.0
0
0
0
0
1.0
0
0
0
0
1.0
0
HOME: HRRE AC,@STKPTR
ADDI AC,(CBUF)
MOVEM AC,HDP ;POINTS TO DATA
PUSHJ P,ACSAVE
PUSH P,[TRANS]
PUSH P,[TH]
PUSHJ P,UPDATE
PUSH P,[TRANS]
PUSH P,[TRANS]
PUSH P,HDP
PUSHJ P,TIMES ;LIFT OFF POINT
PUSH P,[TRANS]
MOVE AC,[XWD TH,DELTH]
BLT AC,DELTH+5
PUSH P,[DELTH]
PUSHJ P,SOLVE ;ARM SOLUTION FOR LIFTOFF
MOVEI AC,14
ADDB AC,HDP ;LIFT OFF TIME
MOVE TAC,(AC)
ASH TAC,16
MOVEM TAC,NTICKS
AOS AC,HDP ;SET DOWN MOD MATRIX
PUSH P,[TRANS]
PUSH P,[RESTT]
PUSH P,AC
MOVEI AC,14
ADDB AC,HDP ;MID TIME
MOVE TAC,(AC)
ASH TAC,16
MOVEM TAC,TIMM
AOS AC,HDP ;FINAL TRANS
SKIPE RESTF
JRST[ PUSH P,[RESTT]
PUSH P,[RESTT]
PUSH P,AC
PUSHJ P,TIMES
SETZM RESTF
JRST H7]
HRLI AC,(AC)
HRRI AC,RESTT
BLT AC,RESTT+13
H7: PUSHJ P,TIMES
MOVE AC,[XWD DELTH,THM]
BLT AC,THM+5
PUSH P,[TRANS]
PUSH P,[THM]
PUSHJ P,SOLVE ;ARM SOLUTION FOR SET DOWN
MOVE AC,[XWD THM,TFF]
BLT AC,TFF+5
MOVEI AC,14
ADDB AC,HDP ;FINAL TIME
MOVE TAC,(AC)
ASH TAC,16
MOVEM TAC,TIMF
PUSH P,[RESTT]
PUSH P,[TFF]
PUSHJ P,SOLVE
JUMPE 1,[MOVEI AC,SOLERR
MOVEM AC,TRAJER
JRST TOFF]
PUSHJ P,ACREST
MOVEI I,5
H1: MOVE AC,TFF(I)
FSBR AC,THM(I)
MOVEM AC,THF(I)
MOVE AC,TH(I)
FSBR AC,TFF(I)
MOVEM AC,DTH(I)
MOVE AC,THM(I)
FSBR AC,DELTH(I)
MOVEM AC,THM(I)
MOVE AC,DELTH(I)
FSBR AC,TH(I)
MOVEM AC,DELTH(I)
SOJGE I,H1
SKIPN AC,NTICKS
JRST[ PUSH P,[DELTH]
PUSHJ P,RUNTIM
MOVEM AC,NTICKS
JRST .+1]
ASH AC,-15
MOVEM AC,COUNT
SKIPN TIMM
JRST[ PUSH P,[THM]
PUSHJ P,RUNTIM
MOVEM AC,TIMM
JRST .+1]
SKIPN TIMF
JRST[ PUSH P,[THF]
PUSHJ P,SLOTIM
MOVEM AC,TIMF
JRST .+1]
MOVEI AC,2
MOVEM AC,HOMEC
AOS AC,HDP
PUSHJ P,UPDC
TRO INCREM+RUN+HOMEF
SETZM TICKS
MOVE AC,STKPTR
TRZE BOTH
JRST[ AOS AC,STKPTR
HLRE AC,(AC)
MOVEM AC,FUNCT
JRST .+2]
SETZM FUNCT
JRST NXTJIF
RUNTIM: SETZ AC,
SKIPA
SLOTIM: MOVE AC,[30.0]
MOVE J,-1(P) ;ADDR OF ARRAY
MOVEI I,5
R1: MOVM MQ,5(J)
FMPR MQ,TIMFAC(I)
CAML MQ,AC
MOVE AC,MQ
SOJ J,
SOJGE I,R1
FADR AC,[20.0]
FIX AC,215000
SUB P,[XWD 2,2]
JRST @2(P)
IKU: HRRE AC,@STKPTR
ADDI AC,(CBUF)
MOVEM AC,HDP ;POINTS TO DATA
PUSHJ P,ACSAVE
SKIPE RESTF
JRST[ PUSH P,[RESTT]
PUSH P,[RESTT]
PUSH P,HDP
PUSHJ P,TIMES
PUSH P,[RESTT]
SETZM RESTF
JRST I7]
PUSH P,HDP
I7: MOVE AC,[XWD TH,DELTH]
BLT AC,DELTH+5
PUSH P,[DELTH]
PUSHJ P,SOLVE ;ARM SOLUTION
PUSHJ P,ACREST
JUMPE 1,[MOVEI AC,SOLERR
MOVEM AC,TRAJER
JRST TOFF]
MOVE AC,[XWD DELTH,TFF]
BLT AC,TFF+5
MOVEI I,5
I1: MOVE AC,DELTH(I)
FSBR AC,TH(I)
MOVEM AC,DELTH(I)
MOVE AC,TH(I)
FSBR AC,TFF(I)
MOVEM AC,DTH(I)
SOJGE I,I1
MOVEI AC,14
ADDB AC,HDP ;TIME
MOVE AC,(AC)
ASH AC,16
SKIPN AC
JRST[ PUSH P,[DELTH]
PUSHJ P,SLOTIM
JRST .+1]
MOVEM AC,NTICKS
ASH AC,-15
ADDI AC,=60
MOVEM AC,COUNT
AOS AC,HDP
PUSHJ P,UPDC
TRO INCREM+RUN
SETZM TICKS
MOVE AC,STKPTR
TRZE BOTH
JRST[ AOS AC,STKPTR
HLRE AC,(AC)
MOVEM AC,FUNCT
JRST .+2]
SETZM FUNCT
JRST NXTJIF
REFLEX: MOVEI I,1
MOVEI K,65B23
REX:
IFE USER,<
PUSHJ P,PREAD
LDB AC,[POINT 12,DACVAL,11]
ADD AC,REF(I)
MOVEM AC,OBS(I)
>
RMOR: SOJGE I,REX
TRNN STCH
POPJ P,
MOVEI I,1
SIT: MOVE AC,OBS(I)
JUMPG AC,[ LSH I,3
IORI I,TOUCH
MOVEM I,TRAJER
POP P,I
JRST TOFF]
SOJGE I,SIT
POPJ P,
REF: -1000
-1000
BLOCK 4
IFN SIMU,<
OBS-1
ARM.TO: .+4
>
OBS: 0
0
SOTCHS: 0
SETCH: MOVE AC,SOTCH
MOVEM AC,SOTCHS
HRLE AC,@STKPTR
MOVEM AC,SOTCH
JUMPE AC,NEXT
TRO STCH
JRST NEXT
XLIST
LIT
LIST
IFE SIMU,<END START>
IFN SIMU,<END>